Information
- ID
- 296
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 7
- Tags
- # Submissions
- 180
- Accepted
- 37
- Uploaded By
代码长度有点夸张,但是感觉应该很好理解
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{ stack <char> s;
string x;
cin>>x;
getchar();
int ret=1,l=x.size();//用ret记录是否符合,初始值为1,只要没有改变就基本符合
for(int i=0;i<l;i++)
{
if(!s.empty())
{ // 正常的包裹是这样的{[(<>)]}
if(s.top()=='['&&x[i]=='{')
{//‘[’是在‘{’的内层的符号,所以不能让‘{’比‘[’后出现,如果后出现就不符合
ret=0;break;
}
if(s.top()=='('&&(x[i]=='['||x[i]=='{'))//同理↑↓
{
ret=0;break;
}
if(s.top()=='<'&&(x[i]=='('||x[i]=='['||x[i]=='{'))
{
ret=0;break;
}
}
if(s.empty()&&(x[i]=='}'||x[i]=='>'||x[i]==']'||x[i]==')') )
{
ret=0; break;
}//如果栈是空的,只要进入一个反括,那么这串符号就一定不符合了
if(x[i]=='{'||x[i]=='<'||x[i]=='('||x[i]=='[')
{
s.push(x[i]);
}
if(x[i]=='}'||x[i]=='>'||x[i]==']'||x[i]==')')
{//正常的符号匹配(写的有点赘余了,用if其实更好)
switch(x[i])
{
case '}':if('{'==s.top())
{
s.pop();
}
else ret=0;
break;
case ')':if('('==s.top())
{
s.pop();
}
else ret=0;
break;
case '>':if('<'==s.top())
{
s.pop();
}
else ret=0;
break;
case ']':if('['==s.top())
{
s.pop();
}
else ret=0;
break;
}
}
}
ret==1&&s.empty()?cout<<"YES"<<endl:cout<<"NO"<<endl;
}//注意不仅要判断ret还要判断栈是否为空
return 0;
}
By signing up a 追梦算法网 universal account, you can submit code and join discussions in all online judging services provided by us.