算法

Balanced Brackets

判断一段字符串里的括号是否成对、顺序是否正确

算法步骤

  1. 新建一个空栈。
  2. 遍历字符:
    • 若是左括号,压栈。
    • 若是右括号:
      • 栈为空则直接失败。
      • 弹出栈顶,判断是否与当前右括号匹配。
  3. 遍历完字符串后:
    • 栈为空表示全部匹配;
    • 栈非空表示有未匹配的左括号。

时间复杂度:O(n)O(n)

空间复杂度:O(n)O(n)

混合匹配如 ([)] 应判定为 false,而不是忽略顺序。

参考代码

function isBalanced(s: string): boolean {
  const stack: string[] = [];
  const pairs: Record<string, string> = {
    ')': '(',
    ']': '[',
    '}': '{'
  };

  for (const ch of s) {
    if (ch === '(' || ch === '[' || ch === '{') {
      stack.push(ch);
    } else if (ch in pairs) {
      if (stack.pop() !== pairs[ch]) return false;
    }
  }

  return stack.length === 0;
}
在 GitHub 上编辑

上次更新于