📅  最后修改于: 2023-12-03 15:11:55.961000             🧑  作者: Mango
在编写代码时,我们经常需要处理字符串,并验证其中的括号是否匹配。如果括号不匹配,代码可能会出现错误或导致意外结果。因此,我们需要一种方法来检查括号是否匹配,并在其中添加必要的括号以使其有效。
本文将介绍如何使用栈(Stack)来解决此问题并计算要添加的最小括号数以使其有效。我们将从以下几个方面来讲解:
给定一个由左、右括号和小写字母组成的字符串,编写一个函数来检查其中的括号是否匹配。要求添加最少的括号使其有效。
示例 1:
输入:"()())()"
输出:2
说明:需要添加一对括号,"()"和一个右括号")",才能使其有效:"()()()()"
示例 2:
输入:"((("
输出:3
说明:需要添加三个右括号")"才能使其有效:"((()))"
示例 3:
输入:"))(("
输出:4
说明:需要添加两对括号,"()"和")(",才能使其有效:"()()()"
本问题可以使用栈(Stack)来解决。我们可以遍历字符串中的每个字符,并将左括号压入栈中。当出现右括号时,我们可以弹出一个左括号,如果弹出的括号不匹配,则需要添加括号使其匹配。
具体步骤如下:
下面是 Python 代码实现:
def min_valid_parentheses(s: str) -> int:
stack = []
count = 0
for c in s:
if c == '(':
stack.append(c)
elif c == ')':
if not stack:
count += 1
elif stack[-1] == '(':
stack.pop()
else:
count += 1
count += len(stack)
return count
下面是 JavaScript 代码实现:
function minValidParentheses(s) {
const stack = [];
let count = 0;
for (const c of s) {
if (c === '(') {
stack.push(c);
} else if (c === ')') {
if (!stack.length) {
count++;
} else if (stack[stack.length - 1] === '(') {
stack.pop();
} else {
count++;
}
}
}
count += stack.length;
return count;
}
本文介绍了使用栈来计算需要添加的最小括号数以使其有效。根据题意,我们可以在遇到不匹配的右括号时添加一个左括号,或在最后统计栈中剩余的左括号个数。代码实现较为简单,但需要注意特殊情况的处理。对于巩固栈的应用及括号匹配问题有一定帮助。