括号配对(栈)

编写代码时,我们经常会多写或少写某一半括号,导致编译错误,请编写一个程序,判断是否有这个问题。

 

输入

第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行为多组测试数据,

每组数据都是一个字符串S(S的长度小于10000,且S不是空串,只由‘{’,‘}’,‘(’,‘)’组成)。

 

输出

每组测试数据的输出占一行,如果该无错误,则输出Yes,反之,输出No

 

样例输入

3

{(})

(})

({{}()})

样例输出

No

No

Yes

 1 //2、栈
 2 #include<iostream>
 3 #include<string.h>
 4 using namespace std;
 5 char s[1005];
 6 char stack[1005];
 7 int main(){
 8     int n;
 9     cin>>n;
10     while(n--){
11         int len,top=1;
12         cin>>s;
13         len=strlen(s);
14         stack[top]=s[0];
15         top++;
16         for(int i=1;i<len;i++){
17             if(s[i]=='{'||s[i]=='('){
18                 stack[top++]=s[i];
19             }
20             else{
21                 if(stack[top-1]=='{'&&s[i]=='}')
22                     top--;
23                 else if(stack[top-1]=='('&&s[i]==')')
24                     top--;
25                 else
26                     stack[top++]=s[i];
27             }
28         }
29         if(top==1)
30             cout<<"Yes"<<endl;
31         else
32             cout<<"No"<<endl;
33     }
34     return 0;
35 } 

运行截图:

 

posted @ 2018-06-24 23:41  无心小男  阅读(150)  评论(0编辑  收藏  举报