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

输入
第一行输入一个数N(0 < N <= 100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“,”]”,”(“,”)”四种字符

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

这个题难度竟然是3,感觉就快到2而已!!!

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[])
{
    int N;
    char brackets[10001];
    char b[10001];
    int len, key, flag;
    scanf("%d", &N);
    while (N--)
    {
        key = 0;
        flag = 1;
        scanf("%s", brackets);
        len = (int)strlen(brackets);
        for (int i = 0; i < len; i++)
        {
            if (brackets[i] == '(' || brackets[i] == '[')
            {
                b[key++] = brackets[i];
            }
            else if (brackets[i] == ')' && b[key - 1] == '(')
            {
                key--;
            }
            else if (brackets[i] == ']' && b[key - 1] == '[')
            {
                key--;
            }
            else
            {
                printf("No\n");
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("Yes\n");
        }
    }

    return 0;
}