题解 | 括号的匹配

括号的匹配

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

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
        unordered_map<char,int>mp;
        mp['{']=1;mp['[']=2;mp['(']=3;mp['<']=4;
        mp['}']=-1;mp[']']=-2;mp[')']=-3;mp['>']=-4;
        stack<char>st;
        string s;
        cin>>s;
        int len = s.length(),tmpmax = 0;
        bool res = true;
        for(int i=0;i<len;i++){
            if(mp[s[i]]<0)tmpmax = 0;
            else if(!st.empty()&&mp[st.top()]>mp[s[i]]){
                res = false;
                break;
            }
            else tmpmax = max(tmpmax,mp[s[i]]);
            if(mp[s[i]]>0)st.push(s[i]);
            else if(mp[s[i]]<0&&!st.empty()&&mp[st.top()]+mp[s[i]]==0)st.pop();
            else {
                res = false;
                break;
            }
        }
        if(res&&st.empty())cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:04
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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