括号匹配

143 阅读1分钟

括号匹配

题目

一个字符串内部可能包含 { } ( ) [ ] 三种括号,判断该字符串是否是括号匹配的。
(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;
}