//之前的代码一直是RuntimeError,,没有考虑到low越界,low最小为0
//错误代码
#include<stdio.h> #include<string.h> int main() { int n,t,low,high,i; char a[10000],s[10000]; scanf("%d",&n); while(n--) { scanf("%s",a); t=strlen(a); low=0; high=0; for(i=0;i<t;i++) { switch(a[i]) { case '(': case'[': s[low++]=a[i];break; case ')': if(s[--low]=='(') { high++; break; } else { break; } case']': if(s[--low]=='[') { high++; break; } else break; } } if(t==high*2) printf("Yes "); else printf("No "); } return 0; }//改正之后的代码
#include<stdio.h> #include<string.h> int main() { int n,t,low,high,i; char a[10000],s[10000]; scanf("%d",&n); while(n--) { scanf("%s",a); t=strlen(a); low=0; high=0; for(i=0;i<t;i++) { switch(a[i]) { case '(': case'[': s[low++]=a[i];break; case ')': if(low!=0&&s[--low]=='(') { high++; break; } else { break; } case']': if(low!=0&&s[--low]=='[') { high++; break; } else break; } } if(t==high*2) printf("Yes "); else printf("No "); } return 0; }
//之后用栈写的
#include<iostream> #include<string.h> #include<stack> using namespace std; int main() { int n,i; char a[10000]; stack<char>p; cin>>n; while(n--) { while(!p.empty()) p.pop(); int flag=1; cin>>a; int t=strlen(a); for(i=0;i<t;i++) { switch(a[i]) { case '(': case '[':p.push(a[i]);break; case ')': { if(!p.empty()&&p.top()=='(') p.pop(); else flag=0; break; } case ']': { if(!p.empty ()&&p.top()=='[') p.pop (); else flag=0; break; } } if(flag==0) { cout<<"No"<<endl; break; } } if(p.empty()&&flag==1) cout<<"Yes"<<endl; } return 0; }