#include <unordered_map>
class Solution {
public:
    /**
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<int> st;
        unordered_map<char, char> hash = {{'[', ']'}, {'{', '}'}, {'(', ')'}};
        for (auto &c: s) {
            if (hash.count(c)) {
                st.push(hash[c]);
            } else {
                if (st.empty() || st.top() != c) {
                    return false;
                }
                st.pop();
            }
        }
        return st.empty();
    }
};

思路:栈模拟。

* 遇到左括号,将对应的右括号压入栈。

* 遇到右括号,如果栈顶没有匹配,则返回false,否则将栈顶弹出。

最后还需要判断栈为空。