Mihara 提交的代码
提交时间: 2022 七月
语言: C++
运行时间: 0ms
占用内存: 256K
Accepted
代码内容

登录之后查看代码,点此登录账号

/*
要求匹配的有大括号{},中括号[],小括号(),尖括号<>等。
 对于每一对括号,必须先左边括号,然后右边括号;
 如果有多个括号,则每种类型的左括号和右括号的个数必须相等;
 对于多重括号的情形,按运算规则,从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号。
例如,{[()]},{()},{{}}为一个合法的表达式,而([{}]),{([])},[{<>}]都是非法的。
*/

// 思路: 用栈实现括号匹配、用map定义嵌套括号的优先级
#include <stack>
#include <unordered_map>
#include <iostream>
using namespace std;

unordered_map<char, int> h = {
    {'{', 1},
    {'[', 2},
    {'(', 3},
    {'<', 4},
    {'}', -1},
    {']', -2},
    {')', -3},
    {'>', -4},
};

int main()
{
    int n;
    cin >> n;
    string op;
    while (n--)
    {
        cin >> op;
        stack<char> stk;
        for (char c : op)
        {
            if (!stk.size() || h[c] >= h[stk.top()])
                stk.push(c);
            else if (h[c] < 0 && h[c] + h[stk.top()] == 0) // 匹配成功
                stk.pop();
            else
                break;
        }
        cout << (stk.empty() ? "YES" : "NO") << endl;
        // 清空栈
        while (stk.size())
            stk.pop();
    }
    return 0;
}