#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,i,j,p;
char t,s[10005],str[10005];
cin>>n;
while(n--){
p=-1;
j=i=0;
cin>>str;
while(j<strlen(str)){
if(str[j]=='[' || str[j]=='('){
s[i]=str[j];
i++;
p++;
j++;
}
else{
if(p>=0){
if((str[j]==']' && s[p]=='[') || (str[j]==')' && s[p]=='(')){
p--;
i--;
j++;
}
if((str[j]==']' && s[p]=='(') || (str[j]==')' && s[p]=='['))
break;
}
else{
p=0;
break;
}
}
}
if(p==-1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
总结:使用栈来进行数据的操作(进栈出栈,其实就是栈顶标记top的变化,我用的是p),不是太难,坑人的就是结果是Yes,No,而不是YES,NO