📅  最后修改于: 2023-12-03 14:58:03.790000             🧑  作者: Mango
在字符串处理中,我们经常需要处理括号匹配问题。其中一个经典问题是:如何通过从给定字符串中删除字符来形成有效的括号子序列,以最小化删除的字符数?
例如,考虑字符串 "))(())("。我们可以删除字符索引 0 和 6 处的两个括号来形成有效的括号子序列 "()()"
这个问题非常适合使用栈数据结构求解。
我们使用栈来跟踪左括号。对于给定的字符串,我们按照从左到右的顺序扫描它。
在扫描完整个字符串之后, stack 堆栈中将包含无法匹配的左括号。
我们可以将这些左括号从原始字符串中删除,并返回结果字符串。如果删除了所有无法匹配的左括号,则所得到的字符串表示有效的括号子序列,并且是原始字符串中删除字符的最小长度。
下面是使用 Python 语言实现上述过程的简单示例代码:
def min_remove_to_make_valid(s: str) -> str:
stack = []
invalid_indices = set()
for i, c in enumerate(s):
if c == '(':
stack.append(i)
elif c == ')':
if not stack:
invalid_indices.add(i)
else:
stack.pop()
invalid_indices.update(stack)
res = []
for i, c in enumerate(s):
if i not in invalid_indices:
res.append(c)
return ''.join(res)
在字符串处理中,括号匹配问题是一个非常经典的问题。通过实现一个简单的栈算法,可以轻松解决此类问题。
上面的示例代码展示了如何使用此方法来最小化字符串长度。与其他字符串问题一样,可以使用类似的算法解决许多字符串处理问题,所以我们需要掌握这个算法。