题解 | 括号的匹配

括号的匹配

https://www.nowcoder.com/practice/78f297134b0c4af09fb88218321c3fcc

#include <bits/stdc++.h>
using namespace std;
bool isvalid(const string & );//引用传递,无需拷贝

int main() {
    int T;cin>>T;
    while(T-->0){
        string s;cin>>s;
        (isvalid(s))?cout<<"YES":cout<<"NO";
        cout<<endl;
    }
    return 0;
}

bool isvalid(string &s){
    stack<char>st;
    unordered_map<char,int>prior={
        {'{',4},{'[',3},{'(',2},{'<',1},{'}',4},{']',3},{')',2},{'>',1}
    };
    for(auto c:s){
        if(c=='{'||c=='['||c=='('||c=='<'){
            if(st.empty()) st.push(c);
            else{
                if(prior[c]<=prior[st.top()]) st.push(c);
                else return false;
            }
        }
        else{
            if(st.empty()) return false;
            else{
                if(prior[c]==prior[st.top()]) st.pop();
                else return false;
            }
        }
    }
    return st.empty();
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

牛客42327521...:在你没来公司之前你们公司连登录功能都没做?让一个实习生做登录页面?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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