题目描述:
现在,有一行括号序列,请你检查这行括号是否配对。
输入描述:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
输出描述:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
7
[(])
(])
([[]()])
]]])))((([[[
][
[)(]
(][)
样例输出:
No
No
Yes
Yes
Yes
No
No
#include<iostream> #include<stack> #include<cstring> using namespace std; char a[20010]; int main(){ int t,n; cin>>t; while(t--){ memset(a,0,sizeof(a)); cin>>a; bool f=false; n=strlen(a); if(n&1){ puts("No"); } else{ stack<char> s; s.push(a[0]); int i=1; while(1){ if(i==n) break; if((!s.empty())&&((s.top()=='['&&a[i]==']')||(s.top()=='('&&a[i]==')')||(s.top()==')'&&a[i]=='(')||(s.top()==']'&&a[i]=='[' ))){ s.pop(); i++; } else if((!s.empty())&&((s.top()=='('&&a[i]==']')||(s.top()=='['&&a[i]==')'))){ f=true;break; } else{ s.push(a[i]); i++; } } if(!s.empty()||f){ puts("No"); } else { puts("Yes"); } } } return 0; }