1.题目是栈的简单应用,但是由于其特殊的条件性,使得空字符串也满足条件,所以也带来了不少的麻烦
2.两种字符要放到同一个栈中去判断,也就是【(】)这种情况是错误的。。第一次由于没有注意到这一点导致WA了很久,
3.下面附上代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <stack>
using namespace std;
int main()
{
int T;char sign;
cin>>T;
cin.get();
while(T--)
{
string s="";
stack<char> one;
one.push('#');
bool flag=true;
if((sign=cin.get())=='\n')
printf("Yes\n");
else
{
s=sign+s;
while((sign=cin.get())!='\n')
s=s+sign;
//cout<<s<<endl;
for(int i=0;i<s.length();i++)
{
if(s.at(i)=='(')
one.push('(');
else if(s.at(i)=='['){
one.push('[');
}
else if(s.at(i)==')')
{
if(one.top()=='(')
one.pop();
else{
flag=false;break;
}
}
else if(s.at(i)==']')
{
if(one.top()=='[')
one.pop();
else{
flag=false;break;
}
}
}
//cout<<one.top()<<endl;
if(one.top()!='#')
flag=false;
if(flag)
printf("Yes\n");
else
printf("No\n");
}
}
//system("pause");
return 0;
}