📅  最后修改于: 2023-12-03 15:40:33.948000             🧑  作者: Mango
在 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$ 是输入字符串的长度。由于该函数仅遍历一次字符串,并使用栈来快速检查括号的开合状态,因此它具有较好的时间复杂度和空间复杂度。