20. 有效的括号

解题思路

  1. 如果是左括号,则直接入栈;

  2. 如果是右括号,则将其与栈顶元素进行匹配;

    • 如果匹配,则出栈;
    • 如果不匹配,直接返回 false
    • 如果此时栈为空,则说明右括号多,直接返回 false
  3. 最后检查栈是否为空,若不为空,说明左括号多,直接返回 false

复杂度

  1. 时间复杂度 O(N):正确的括号组合需要遍历 1 遍;

  2. 空间复杂度 O(N):哈希表和栈使用线性的空间大小;

代码实现

var isValid = function (s) {
    let stack = [];
    let obj = {
        '(': ')',
        '[': ']',
        '{': '}'
    };

    for (let i = 0; i < s.length; i++) {
        const ele = s[i];
        if (ele in obj) {
            // 正括号的场景:入栈
            stack.push(ele);
        } else {
            if (stack.length === 0) return false;
            // 反括号的场景:出栈
            let top = stack.pop();
            if (ele != obj[top]) return false; //不匹配
        }
    }

    // 括号遍历结束,栈中还有数据则说明正括号过多,错误
    return stack.length === 0;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1.
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现