题意:紫书
这题比较简单,用一个维护一个栈,遇到左括号入栈,右括号判断栈顶,如果匹配则出栈。
注意: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; }