用两个数组解决南阳理工的括号配对问题(略微用到了数据结构的栈的思想)

题目如下:

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

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

    3
    [(])
    (])
    ([[]()])

样例输出

    No
    No
    Yes

*/

#include
int main(){

int N;
char a[10001];
char b[10001];
scanf("%d",&N);
while(N--){
    int i=0,j;
    int top=-1;
    scanf("%s",a);
        while(a[i]!='\0')
        {
            if(a[i]=='['||a[i]=='(')
            {
                top++;
                b[top]=a[i];
                
            }
            else {
                if(b[top]=='['&&a[i]==']')
                {
                    top--;                    
                }
                    else if(b[top]=='('&&a[i]==')')
                {
                    top--;                    
                }
                else{
                    top++;
                }
                
            }
            i++;
            
        }
        if(top==-1)
            printf("Yes\n");
        else
            printf("No\n");


    
}

    return 0;

}

 

下面首先说下思想以及大体的实现过程。(大佬勿喷)

两个数组,假定a数组就是输入字符串的那个数组,b数组就是存放括号里面 的左括号即“[”和“(”。

现在对a数组的每一个字符进行检测,如果是左括号就放进b数组中。

如果遇到了右括号就进行匹配,从最外面也就是top指针所指到的地方开始匹配。

用两个数组解决南阳理工的括号配对问题(略微用到了数据结构的栈的思想)_第1张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(程序设计)