虚空终端 • 2个月前
注意括号有优先级的区别
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const char rfc[4]={'<','(','[','{'};
const char rfc1[4]={'>',')',']','}'};
pair<int,int> check(char c)
{
pair<int,int> t={-1,0};
for(int i=0;i<4;i++)
if(c==rfc[i]||c==rfc1[i])
{
t.first=i+1;
t.second=(c==rfc1[i]);
break;
}
return t;
}
int main()
{
int T;
cin>>T;
while(T--)
{
bool flag=1;
stack<int> s;
string str;
cin>>str;
for(auto i:str)
{
pair<int,int> t=check(i);
if(t.first==-1)
continue;
if(!t.second)
{
if(s.empty())
s.push(t.first);
else
{
if(t.first>s.top())
{
flag=0;
break;
}
s.push(t.first);
}
}
else
{
if(s.empty())
{
flag=0;
break;
}
if(s.top()!=t.first)
{
flag=0;
break;
}
s.pop();
}
}
if(flag&&s.empty())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
评论:
请先登录,才能进行评论