题意:紫书
这题比较简单,用一个维护一个栈,遇到左括号入栈,右括号判断栈顶,如果匹配则出栈。
注意:1、输入存在空串 所以要用getline.
2、此题是嵌套括号而不是括号匹配,因此像[ ( ] ) 输出是no 而不是yes
ac代码:
#include<cstdio>
#include<cstring>
#include<stack>
#include<string>
#include<iostream>
using namespace std;//wa example:[(])
const int maxn=200;
char c[maxn];
int T;
bool solve(){
stack<char> s;
for(int i=0;i<strlen(c);i++){
if(c[i]=='['||c[i]=='(') s.push(c[i]);
else if(c[i]==']'&&!s.empty()&&s.top()=='[') s.pop();
else if(c[i]==')'&&!s.empty()&&s.top()=='(') s.pop();
else return false;
}
if(s.empty()) return true;
return false;
}
int main(){
//freopen("out.txt","w",stdout);
while(cin>>T){
cin.get();
for(int cas=1;cas<=T;cas++){
memset(c,0,sizeof(c));
cin.getline(c,maxn);
if(solve()) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}