JavaScript 栈实现:判断字符串中的括号是否有效

判断字符串中的括号是否有效是一个常见的算法问题。通常,我们可以使用栈(Stack)这种数据结构来解决这个问题。以下是使用 JavaScript 实现的有效括号判断的代码示例:
function isValid(s) {
const stack = [];
const map = {
'(': ')',
'[': ']',
'{': '}'
};
for (let i = 0; i < s.length; i++) {
const char = s[i];
// 如果是左括号,压入栈中
if (map[char]) {
stack.push(char);
}
// 如果是右括号,检查是否与栈顶的左括号匹配
else {
const top = stack.pop(); // 弹出栈顶元素
if (char !== map[top]) {
return false;
}
}
}
// 如果栈为空,说明所有括号都匹配成功
return stack.length === 0;
}
// 测试用例
console.log(isValid("()")); // true
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false
console.log(isValid("([)]")); // false
console.log(isValid("{[]}")); // true
代码解释:
- 栈的使用:我们使用一个栈来存储遇到的左括号(
(
,[
,{
)。 - 映射关系:我们使用一个对象
map
来存储左括号和右括号的对应关系。 - 遍历字符串:
- 如果当前字符是左括号,将其压入栈中。
- 如果当前字符是右括号,弹出栈顶元素并检查是否与当前右括号匹配。
- 最终检查:遍历结束后,如果栈为空,说明所有括号都匹配成功,返回
true
;否则返回false
。
时间复杂度:
- 时间复杂度为 O(n),其中 n 是字符串的长度。我们只需要遍历一次字符串。
- 空间复杂度为 O(n),在最坏情况下,栈的大小可能会达到字符串长度的一半。
适用场景:
- 这种算法适用于需要判断括号是否有效匹配的场景,例如在解析表达式、编译器设计、代码格式化工具等场景中。
扩展:
- 如果你需要处理更复杂的括号嵌套规则,或者需要支持更多的括号类型,可以扩展
map
对象来支持更多的括号对。
希望这个解决方案对你有帮助!如果有其他问题,欢迎继续提问。