返回
JavaScript LeetCode 1021:删除最外层括号,解析巧妙,易懂易实现
前端
2024-01-25 16:32:40
引言
在数据结构的海洋中,栈以其先进后出的特性独树一帜。当我们谈及括号匹配的问题时,栈便自然成为我们的首选工具。在 JavaScript 中,如何利用栈来删除 LeetCode 第 1021 题中字符串的最外层括号呢?
巧妙的栈应用
要判断一个括号是否是外层括号,有两个关键条件:
- 压栈前栈为空,此时的左括号为最外层。
- 压栈后栈为空,此时的右括号为最外层。
基于此,我们可以设计一个简洁高效的算法:
算法步骤:
- 初始化一个栈,记为
stack
。 - 遍历输入字符串中的每个字符
c
。 - 如果
c
是左括号 '(',则将c
压入stack
。 - 如果
c
是右括号 ')':- 如果
stack
不为空,则将c
压入stack
。 - 如果
stack
为空,则说明c
为最外层右括号,将其忽略。
- 如果
- 返回
stack
中所有括号的连接。
代码实现:
/**
* 删除字符串中最外层的括号
* @param {string} s 输入字符串
* @return {string} 删除最外层括号后的字符串
*/
const removeOuterParentheses = (s) => {
const stack = [];
let result = '';
for (const char of s) {
if (char === '(') {
stack.push(char);
} else if (char === ')') {
if (stack.length > 0) {
stack.pop();
}
}
if (stack.length > 0) {
result += char;
}
}
return result;
};
实例解析
以 "(()())"
为例,该字符串包含一对最外层括号和一对内层括号。
- 当遇到第一个左括号时,将其压入栈中。
- 当遇到第一个右括号时,栈不为空,因此将其压入栈中。
- 当遇到第二个左括号时,将其压入栈中。
- 当遇到第二个右括号时,栈不为空,将其压入栈中。
- 当遍历完毕后,栈中还剩下两个括号,因此结果为
"()"
。
总结
通过巧妙地利用栈,我们可以轻松地删除字符串中最外层的括号。这种算法不仅简洁高效,而且易于理解和实现。对于其他涉及括号匹配的问题,这个算法同样适用。
关键词: