Nyoj 2 括号配对问题

括号配对问题

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述

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

输入

第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符

输出

每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No

样例输入

3

[(])

(])

([[]()])

样例输出

No

No

Yes

#include<stdio.h>
#include<string.h>
#include<stack>  
using namespace std;    
    int main()  
    {  
        int s,i,N; 
		char a[10005]; 
       scanf("%d",&N);
        while(N--)  
        {  
            stack<char> k; 	
		   scanf("%s",a);
	     	s=strlen(a); 
        	for(i=0;i<s;i++)
            {  
                if(a[i]=='('||a[i]=='[')  
                    k.push(a[i]);  
                else if(a[i]==')')  
                {  
                    if(!k.empty()&&k.top()=='(')  
                        k.pop();  
                    else  
                        k.push(a[i]);  
                }  
                else if(a[i]==']')  
                {  
                    if(!k.empty()&&k.top()=='[')  
                        k.pop();  
                    else  
                        k.push(a[i]);  
                }  
            }  
            if(k.empty())  
                	printf("Yes
");
            else  
               	printf("No
");       
        }  
        return 0;  
}          

  

原文地址:https://www.cnblogs.com/zhangliu/p/7052681.html