每当我遇到这种字符串匹配问题时,都会使用到哈希表(unordered_map),将每一组括号存入到哈希表中。

当栈为空时会存入括号,之后每遇到一个字符就会将他于栈顶的元素对应的括号比较,如果匹配则输出栈顶元素,如果不匹配就存入栈。当遍历完字符串后就检查栈stk,如果为空则表示所有括号匹配成功,否则表示匹配失败.

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValid(string s) {
        stack<char> stk;
        unordered_map<char,char> map;
        map.emplace('[',']');
        map.emplace('(',')');
        map.emplace('{','}');
        for(char i:s){
            if(stk.empty()){
                stk.push(i);
            }else{
                if(map[stk.top()]==i){
                    stk.pop();
                }else{
                    stk.push(i);
                }
            }
        }
        if(stk.empty()){
            return true;;
        }else{
            return false;
        }
    }
};