NYOJ-2:括号配对问题

描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0< N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]”,”(“,”)”四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([])
样例输出
No
No
Yes

#include
#include
#include 
int main()
{
    int n,len,i,flag;
    int fl,fr,pl,pr;
    char str[10010];
    scanf("%d",&n);
    while(n--)
    {
        flag=1;
        scanf("%s",str);
        len=strlen(str);
        fl=fr=pl=pr=0;
        for(i=0; iswitch(str[i])
            {
            case  '[':
                pl++;
                break;
            case  ']':
                pr++;
                break;
            case  '(':
                fl++;
                break;
            case  ')':
                fr++;
                break;
            }
            if(i==0)
                continue;
            //当括号为 ( 或者为 ] 时判断其合法性
            if(str[i]==']'&&str[i-1]=='(')
            {
                flag=0;
                break;
            }
            else if(str[i]==')'&&str[i-1]=='[')
            {
                flag=0;
                break;
            }
        }
        if(pl!=pr||fl!=fr)
        {
            flag=0;
        }
        if(flag==1)
            printf("Yes\n");
        else
            printf("No\n");
    }

    return 0;
}

你可能感兴趣的:(ACM学习)