【从零开始的JavaScript力扣刷题】20. 有效的括号

118 阅读1分钟

题目

leetcode-cn.com/problems/va…

image.png

解决思路

利用栈,将左边符号放入栈内,然后将栈顶和栈头匹配

代码示例

const isValid = (s) => {
    const stack = [];

    for (let i = 0; i < s.length; i++) {
        const c = s[i];
        if (c == '{' || c == '[' || c == '(') { // 左括号入栈
            stack.push(c);
        } else {                                // 右括号
            if (stack.length == 0) {              // 此时栈空,无法匹配
                return false;
            }
            const top = stack[stack.length - 1];  // 获取栈顶
            if (top == '(' && c == ')' || top == '[' && c == ']' || top == '{' && c == '}') {
                stack.pop();                        // 如果栈顶是对应的左括号,被匹配,出栈
            } else {                              // 不是对应的左括号,无法匹配
                return false;
            }
        }
    }
    return stack.length == 0; // 栈空,则所有左括号找到匹配;栈中还剩有左括号,则没被匹配
};

学到的知识

  • var 与 let/const 有两个主要的区别(之前一直用的var):

    1. var 声明的变量没有块级作用域,它们仅在当前函数内可见,或者全局可见(如果变量是在函数外声明的)。
    2. var 变量声明在函数开头就会被处理(脚本启动对应全局变量)。

箭头函数:zh.javascript.info/arrow-funct…

本文中 const isValid = (s) => {} 等同于 const isValid = function(s) {}

 

这题属于思路明确但是我不会写呜呜