题目大意:给一个括号串,看是否匹配。
题目分析:一开始用区间DP写的,超时了。。。
注意:空串合法。
代码如下:
# include<iostream> # include<cstdio> # include<stack> # include<cstring> # include<algorithm> using namespace std; char p[130]; stack<char>s; bool judge() { int len=strlen(p); if(len==0) return true; while(!s.empty()) s.pop(); for(int i=0;i<len;++i){ if(p[i]=='('||p[i]=='[') s.push(p[i]); else{ if(s.empty()) return false; char c=s.top(); if(c=='('&&p[i]!=')') return false; if(c=='['&&p[i]!=']') return false; s.pop(); } } return s.empty(); } int main() { int T; scanf("%d",&T); getchar(); while(T--) { gets(p); if(judge()) printf("Yes "); else printf("No "); } return 0; }