📌  相关文章
📜  检查括号是否正确关闭 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:40:33.948000             🧑  作者: Mango

检查括号是否正确关闭 - TypeScript

在 TypeScript 中,我们经常需要处理字符串中的括号配对问题。具体来说,我们需要检查字符串中的所有括号是否正确关闭,包括小括号、中括号和大括号。

以下是一个简单的 TypeScript 函数,用于检查字符串中的括号是否正确关闭:

function checkBrackets(input: string): boolean {
  const stack: string[] = [];
  const openBrackets = ["(", "{", "["];
  const closeBrackets = [")", "}", "]"];

  for (const char of input) {
    if (openBrackets.includes(char)) {
      stack.push(char);
    } else if (closeBrackets.includes(char)) {
      const lastBracket = stack.pop();
      if (!lastBracket) {
        return false;
      }

      const correspondingOpenBracket = openBrackets[closeBrackets.indexOf(char)];
      if (lastBracket !== correspondingOpenBracket) {
        return false;
      }
    }
  }

  return stack.length === 0;
}
函数说明

该函数接受一个字符串参数 input,并返回一个布尔值,表示字符串中的括号是否正确关闭。如果正确关闭,则返回 true,否则返回 false

算法说明

该函数使用栈来跟踪括号的开闭状态。具体来说,对于字符串中的每个字符,如果它是一个开括号,则将其压入栈中;否则,如果它是一个闭括号,则弹出栈顶元素(即最近的开括号),并检查它是否与当前闭括号匹配。

如果栈为空,而遇到了闭括号,则说明字符串中存在未正确关闭的括号。如果栈中仍有未匹配的括号,而字符串已经处理完毕,则说明字符串中存在未正确关闭的括号。否则,如果栈为空并且字符串中的所有括号都已正确关闭,则说明字符串中的括号已全部正确关闭。

值得注意的是,该函数假设输入字符串中不存在其他字符,例如字母和数字。如果输入字符串中包含这些字符,则需要相应地修改函数实现。

示例

以下是一些示例输入和输出:

checkBrackets("(foo { bar (baz) [boo] } )") // true
checkBrackets("(foo { bar (baz) [boo) } )") // false
checkBrackets("(foo { bar { baz }") // false
性能

该函数的时间复杂度为 $O(n)$,其中 $n$ 是输入字符串的长度。由于该函数仅遍历一次字符串,并使用栈来快速检查括号的开合状态,因此它具有较好的时间复杂度和空间复杂度。