题目描述:

现在,有一行括号序列,请你检查这行括号是否配对。

输入描述:

第一行输入一个数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;
}