天天看点

1204:括号配对问题

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;  
    }   
           

继续阅读