题解 | #Problem E#

Problem E

https://www.nowcoder.com/practice/3bad4a646b5b47b9b85e3dcb9488a8c3

#include <bits/stdc++.h>
using namespace std;
int bracketNum(char c) {
    if (c == '(')return 1;
    if (c == ')')return -1;
    if (c == '[')return 2;
    if (c == ']')return -2;
    if (c == '{')return 3;
    if (c == '}')return -3;
    return 100;
}
int main() {
    string nn;getline(cin,nn);
    int n=stoi(nn);
    while (n--) {
        string s;getline(cin,s);
        for (auto it = s.begin(); it != s.end();) {
            if (bracketNum(*it) == 100)it = s.erase(it);
            else it++;
        }
        // cout<<s<<"      ";
        if(s.length()==0){
            cout<<"yes"<<endl;
        }else{
            stack<char>stk;
            bool isRight = true;
            for(int i =0;i<s.length();i++){
                if(bracketNum(s[i])>0){
                    //左括号都入栈
                    stk.push(s[i]);
                }else{
                    //碰到右括号
                    if(stk.size()==0){
                        isRight=false;
                        break;
                    }else if(bracketNum(s[i])+bracketNum(stk.top()) != 0){
                        isRight=false;
                        break;
                    }
                    stk.pop();
                }
            }
            cout<<(isRight&&stk.size()==0?"yes":"no")<<endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

其中有一个测试用例是(((,注意判断出循环之后栈是否为空,不为空就是no

全部评论

相关推荐

没关系现在见到了、
真的很糟糕:见过国王的offer吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-20 19:41
那一天的Java_J...:简历完全流水账,学生思维很严重,还有很大的优化空间,可以多看看牛客的简历。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务