括号匹配
题目
一个字符串内部可能包含 { } ( ) [ ] 三种括号,判断该字符串是否是括号匹配的。
如 (a{b}c) 就是匹配的, {a(b 和 {a(b}c) 就是不匹配的。
该题目的考察目的很明确 —— 栈
栈,先进后出
和栈相关的数据结构
- 队列,先进先出
- 堆,如常说的“堆栈模型”
function isMatch(left, right) {
if (
(left === "(" && right === ")") ||
(left === "[" && right === "]") ||
(left === "{" && right === "}")
)
return true;
return false;
}
function matchBracket(str) {
const length = str.length;
if (length === 0) return true;
const leftBracket = "([{";
const rightBracket = ")]}";
let stack = [];
for (let i = 0; i < length; i++) {
const s = str[i];
if (leftBracket.includes(s)) {
// 左括号,压栈
stack.push(s);
} else if (rightBracket.includes(s)) {
// 右括号,判断栈顶(是否出栈)
const top = stack[stack.length - 1];
if (isMatch(top, s)) {
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
}