NYOJ 2 括号是否配对

来源:互联网 发布:爱福窝效果图制作软件 编辑:程序博客网 时间:2024/04/28 09:09
 现在,有一行括号序列,请你检查这行括号是否配对。

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

#include<stdio.h>  
int main()  
{  
    int t;  
    char c,s[10001],*p;  
    scanf("%d\n",&t);  
    while(t--){  
        *s=getchar();  
        p=s+1;  
        while((c=getchar())!='\n'){  
            if(*(p-1)==c-1||*(p-1)==c-2)  
                p--;  
            else  
                *p++=c;  
        }  
        if(p==s)  
            printf("Yes\n");  
        else  
            printf("No\n");  
    }  
}          

思路详解:首先输入一个字符,让指针s指向首个字符,指针p指向下一个字符地址,然后判断下一个输入的字符是否为换行,若是,则退出,输出No,若否,则判断指针p的

上个位置即s指的的位置是否与输入的字符匹配,若是,则p指向上一个字符的位置,即s的位置,否则,对p指向的位置赋值,然后p++,指向下一个字符的位置,再

输入一个字符,若与p指的上一个字符位置的字符匹配,则p--,再输入一个字符,若与p指向上一个字符匹配,则p--,即与s指针重合,若输入回车键,输出Yes.

0 0