关于栈的一个问题1

作者在 2012-03-29 21:37:47 发布以下内容
描述现在,有一行括号序列,请你检查这行括号是否配对。
输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3 [(]) (]) ([[]()])样例输出No No Yes
#include <stdio.h>
#include <string.h>
int main()
{
    int n;
    scanf("%d%*c",&n);    //输入测试组数
    while(n--)
    {        
        char a[10001],b[10001];     //把数据输入a数组,b数组作为一个栈存在
        gets(a);
        int len=strlen(a),j,i=1;
        if(a[0]==')'||a[0]==']'||len%2)  //如果第一个数据是)或是]或者数组长度是奇数
        {
            printf("No\n");        //表示不能配对,输出No
            continue;
        }
        b[j=0]=a[0];
        for(;i<len-1;i++)        
        {
            if(b[j]==a[i]-2||b[j]==a[i]-1)//如果一个符号能被下一个符号配对,那么把下下一个元素压入b
            {
                if(j==0)
                    b[j]=a[++i];
                else
                    j--;
            }
            else      //如果一个符号不能被下一个符号配对,把这个符号压入b的数组中
                b[++j]=a[i];
        }
        if(b[j]==a[i]-2||b[j]==a[i]-1&&j==0)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
 
默认分类 | 阅读 1005 次
文章评论,共0条
游客请输入验证码
文章分类
最新评论