题目
解决思路
利用栈,将左边符号放入栈内,然后将栈顶和栈头匹配
代码示例
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):var声明的变量没有块级作用域,它们仅在当前函数内可见,或者全局可见(如果变量是在函数外声明的)。var变量声明在函数开头就会被处理(脚本启动对应全局变量)。
本文中 const isValid = (s) => {} 等同于 const isValid = function(s) {}
这题属于思路明确但是我不会写呜呜