题解 | #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

全部评论

相关推荐

11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
Bug压路:老哥看得出来你是想多展示一些项目,但好像一般最多两个就够了😂页数一般一页,多的也就2页;这些项目应该是比较同质化的,和评论区其他大佬一样,我也觉得应该展示一些最拿手的(质量>数量)😁😁😁专业技能部分也可以稍微精简一些
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务