【力扣】 - 20.有效的括号

176 阅读1分钟

有效的括号

时间复杂度:O(n),其中 n 是字符串 s 的长度。
空间复杂度:O(n+∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含 6 种括号,∣Σ∣=6。栈中的字符数量为O(n),而哈希表使用的空间为 O(∣Σ∣),相加即可得到总空间复杂度。

  1. 由题意知道匹配括号的流程符合 “ 栈 ” 这种数据结构
  2. 依次将左括号放入栈
  3. 匹配到右括号则出栈
  4. 遍历结束判断栈是否为空
var isValid = function (s) {
    const n = s.length;
    if (n % 2 === 1) {
        return false;
    }
    const pairs = new Map([
        [')', '('],
        [']', '['],
        ['}', '{']
    ]);
    const stk = [];
    for (let ch of s) {
        if (pairs.has(ch)) {
            if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {
                return false;
            }
            stk.pop();
        } else {
            stk.push(ch);
        }
    };
    return !stk.length;
};