C语言版数据结构与算法pta合集:7-3 括号匹配

发布时间:2024年01月13日

本题目要求读入n个字符串,每个字符串是一个括号序列,如“{[()]}”,然后判断每个括号序列是否匹配。

输入格式:

第一个输入为整数n,表示n个序列,然后依次输入n个括号序列。

输出格式:

对于每一括号序列,如果序列中的括号是匹配的,则输出Yes;否则,输出“No”。

输入样例:

在这里给出一组输入。例如:

2
{([])}
([]{}()(())

输出样例:

在这里给出相应的输出。例如:

Yes
No
#include<stdio.h>
#include<string.h>
//主要思路:遇到左括号进栈,遇到右括号出栈。对比失败或最后栈不为空为No.
struct stack{
    int top;
    char arr[20];
};
int main(){
    int n=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        struct stack p;
        p.top=-1;//初始化
        int flag=0;//用于标记是否匹配成功
        char temp[20];
        scanf("%s",temp);
        int len= strlen(temp);
        for(int j=0;j<len;j++){
            if(temp[j]=='{'||temp[j]=='['||temp[j]=='('||temp[j]==')'||temp[j]==']'||temp[j]=='}'){//排除一些乱七八糟的东西
                if(temp[j]=='{'||temp[j]=='['||temp[j]=='('){
                    p.arr[++p.top]=temp[j];//进栈
                }else{
                    if(temp[j]==')'&&p.arr[p.top]=='('||temp[j]==']'&&p.arr[p.top]=='['||temp[j]=='}'&&p.arr[p.top]=='{'){
                        //注意&&的优先级比||高,所以可以这么写。
                        p.top--;//出栈

                    }else{
                        flag=1;//匹配失败直接跳出
                        break;
                    }
                }
            }
        }
//        最后输出
        if(flag==0&&p.top==-1){
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
    return 0;
}

?

文章来源:https://blog.csdn.net/zxn275266/article/details/135449343
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。