10 solutions
-
0
代码长度有点夸张,但是感觉应该很好理解
#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; }
Information
- ID
- 296
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 7
- Tags
- # Submissions
- 176
- Accepted
- 36
- Uploaded By