1204:括号配对问题
Description
现在,有一行括号序列,请你检查这行括号是否配对。
Input
第一行输入一个数N(N<=1000)后面是N行由[]()组成的括号序列。
Output
每组输入数据占一行,如果该字符中所含的括号是配对的,则输出Yes,如果不配对则输出No。
Sample Input
3
[(])
(])
([[]()])
Sample Output
No
No
Yes
Source
#include<cstdio>
#include<cstring>
int main()
{
int top,i,T;
char a[10010],stack[10010];
scanf("%d",&T);
while(T--)
{ scanf("%s",a);
top=1; //top所指向b数组下标的下一位
stack[top++]=a[0];
for(i=1; i<strlen(a); i++)
{
if(a[i]=='('||a[i]=='[') //此种情况,进栈
stack[top++]=a[i];
else if(a[i]==')'&&stack[top-1]=='(') //出栈,其实也就是对stack数组栈顶元素的覆盖
top--;
else if(a[i]==']'&&stack[top-1]=='[')
top--;
else
{ //剩下的两种情况都要进栈
stack[top++]=a[i];
}
}
if(top==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}