开心括号(栈)

链接:https://ac.nowcoder.com/acm/contest/13545/J
来源:牛客网

题目描述
有一种特殊的表达式,特殊点在于

它只允许包含两种不同类型的括号:()和[ ]

它可能开心,也可能不开心

如何判断它开不开心呢,举几个例子,如([ ]())或[([ ][ ])]等为正确的匹配,所以这些表达式开心,但[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配,所以这些表达式不开心
现在你需要检验一个表达式是否开心
以字符串的形式输入一个这样的特殊表达式,如果这个表达式开心,就输出“happy” ,不开心就输出“unhappy”

输入描述:
输入仅一行字符
输出描述:
开心就输出 “happy” ,不开心就输出“unhappy”
示例1
输入
[(])
输出
unhappy
备注:
表达式的字符个数小于255

只能说比赛的时候沙雕了,这么简单的题

#include<iostream>
#include<cstdio>
#include<stdio.h>
#include<cstring>
using namespace std;

char q[310] ;
int top;
int main(){
    string s;
    cin >> s;
    int len = s.length();
    for(int i = 0 ; i < len ; i ++){
        if(s[i] == '(' || s[i] == '['){
            top ++;
            q[top] = s[i];
        }
        else if(s[i] == ')' && q[top] == '(' && top){
            top --;
        }
        else if(s[i] == ']' && q[top] == '[' && top){
            top --;
        }
        else{
            cout << "unhappy";
            return 0;
        }
    }
    if(top) cout << "unhappy" ;
    else cout << "happy" ;
    top = 0 ;
    return 0;
}

posted @ 2021-03-30 18:20  时光以北  阅读(110)  评论(0编辑  收藏  举报