括号问题。
若为(或者【则存入栈,若相反则出栈,对应才能出栈。
若有一个不对应,则不正确,或者最后栈不为空。
#include<cstdio>
#include<cstring>
#include<stack>
#include<iostream>
using namespace std;
const int MAXN=150;
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
stack<char>sta;
int T;
char a[MAXN];
scanf("%d",&T);
getchar();
while(T--){
memset(a,0,sizeof(a));
gets(a);
while(!sta.empty()) sta.pop();
int la=strlen(a);
bool ok=true;
for(int i=0;i<la;i++){
if(a[i]=='['||a[i]=='(') sta.push(a[i]);
else if(a[i]==']' || a[i]==')'){
if(sta.empty()) {ok=false;break;}
else{
if(sta.top()=='['&&a[i]==']') sta.pop();
else if(sta.top()=='(' && a[i]==')') sta.pop();
else {ok=false; break;}
}
}
}
if(ok && sta.empty()) printf("Yes\n");
else printf("No\n");
}
return 0;
}