当前位置:编程学习 > C/C++ >>

括号配对问题 栈实现

[html] 
<SPAN style="FONT-SIZE: 14px">括号配对问题  
  
 时间限制:3000 ms  |  内存限制:65535 KB   
  
难度:3  
  
描述 现在,有一行括号序列,请你检查这行括号是否配对。  
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3  
[(])  
(])  
([[]()])样例输出No  
No  
Yes</SPAN>  
 
括号配对问题
 
 时间限制:3000 ms  |  内存限制:65535 KB 
 
难度:3
 
描述 现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3
[(])
(])
([[]()])样例输出No
No
Yes
 
 
 
 
 
[cpp] 
<SPAN style="FONT-SIZE: 14px">#include<cstdio>  
#include<stack>   
#include<cstring>   
using namespace std;  
int main()  
{  
    int test;  
    //freopen("D://ACMInput/input.txt","r",stdin);   
    scanf("%d",&test);  
    while(test--)  
    {  
            stack<char> number;  
            char c[10050];  
            scanf("%s",c);  
            int flag=0;  
            if(strlen(c)%2==1)  
            {  
                printf("No\n");  
                continue;  
            }  
            while(!number.empty())  
            {  
                number.pop();  
            }  
            for(int i=0; i<strlen(c); i++)  
            {  
                if(c[i]=='['||c[i]=='(')  
                {  
                    number.push(c[i]);  
                }  
                else if(c[i]==']')  
                {  
                    if(!number.empty())  
                    {  
                        char c=number.top();  
                        number.pop();  
                        if(c=='[')  
                        {  
                            continue;  
                        }  
                        else flag=1;  
                    }  
                    else flag=1;  
                }  
                else if(c[i]==')')  
                {  
                    if(!number.empty())  
                    {  
                        char c=number.top();  
                        number.pop();  
                        if(c=='(')  
                        {  
                            continue;  
                        }  
                        else flag=1;  
                    }  
                    else flag=1;  
                }  
                if(flag==1)  break;  
            }  
            if(flag==1)  printf("No\n");  
            else printf("Yes\n");  
    }  
    return 0;  
}  
</SPAN>  
 
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
    int test;
    //freopen("D://ACMInput/input.txt","r",stdin);
    scanf("%d",&test);
    while(test--)
    {
            stack<char> number;
            char c[10050];
            scanf("%s",c);
            int flag=0;
            if(strlen(c)%2==1)
            {
补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,