括号配对问题

来源:互联网 发布:美国新屋开工数据 编辑:程序博客网 时间:2024/06/01 09:39

题目

描述

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

输入

第一行输入一个数N(0

输出

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

样例输入
3
[(])
(])
([])
样例输出
No
No
Yes

解法

用数组模拟栈,左括号进栈,如果遇到匹配的右括号,就弹栈.

代码

#include <stdio.h>#include <stdlib.h>#include <string.h>int braceMatching(char* arr, int len){    char c[10010];    c[0] = '#';    int j = 1;    for(int i = 0; i < len; i++) {        //遇到左括号进栈        if(arr[i] == '(' || arr[i] == '[') {            c[j] = arr[i];            j++;        } else {            if((arr[i] == ')' && c[j - 1] == '(') || (arr[i] == ']' && c[j - 1] == '['))                //遇到右括号,如果匹配最后一个左括号,c数组回退一位,相当于出栈                j--;            else {                //如果不匹配最后一个左括号,直接返回匹配错误                return 0;            }        }    }    return j;}int main(){    int T;    scanf("%d", &T);    while(T--) {        char arr[10001];        scanf("%s", arr);        printf("%s\n", braceMatching(arr, strlen(arr)) == 1 ? "Yes" : "No");    }    return 0;}
原创粉丝点击