LeetCode有效括号问题求助:JavaScript实现思路困惑
有效括号问题的JavaScript解法
核心思路
解决这个问题最经典的方法是用栈(后进先出的数据结构),完美适配括号的嵌套顺序要求:
- 遇到左括号时,将其压入栈中;
- 遇到右括号时,检查栈顶元素是否为对应的左括号:
- 若匹配,弹出栈顶元素,继续遍历;
- 若不匹配或栈为空(无对应左括号),直接判定为无效;
- 遍历结束后,若栈为空则所有括号都正确闭合,否则存在未闭合的左括号。
具体实现步骤
- 创建映射表,将右括号与对应左括号关联,方便快速匹配:
const bracketMap = { ')': '(', '}': '{', ']': '[' }; - 初始化空栈,存储未匹配的左括号:
const stack = []; - 遍历字符串每个字符:
- 若为左括号(不在映射表的键中),直接压入栈;
- 若为右括号,先判断栈是否为空(空则无对应左括号,返回
false),再对比栈顶元素与映射表中的对应左括号,不匹配则返回false,匹配则弹出栈顶。
- 遍历完成后,检查栈是否为空:空则所有括号闭合,返回
true;否则返回false。
完整代码实现
function isValid(s) { const bracketMap = { ')': '(', '}': '{', ']': '[' }; const stack = []; for (const char of s) { if (bracketMap[char]) { // 处理右括号:栈空或栈顶不匹配则无效 if (!stack.length || stack.pop() !== bracketMap[char]) { return false; } } else { // 处理左括号:压入栈 stack.push(char); } } // 栈为空才说明所有括号都正确闭合 return stack.length === 0; }
对应题目要求的验证
- 同类型闭合:通过
bracketMap的严格映射,确保右括号只能匹配对应类型的左括号; - 正确顺序闭合:栈的后进先出特性,保证最后打开的括号最先被闭合,符合嵌套顺序;
- 每个闭括号有对应开括号:遇到右括号时栈为空直接返回
false,避免无对应左括号的情况。
对你初步思路的补充
不需要把字符串拆分为数组,JavaScript中可以直接用for...of遍历字符串的每个字符。字符索引比较的思路无法处理嵌套括号的顺序问题(比如([)]这种情况),栈的方式才是最直接有效的解决方案。
内容的提问来源于stack exchange,提问作者Jeffrey
相关产品推荐
相关产品推荐

