📅  最后修改于: 2023-12-03 14:50:19.773000             🧑  作者: Mango
在编程中,括号是十分常见的符号,不论是小括号、中括号还是大括号。在一些情况下,这些括号可能会出现不匹配或者多余的情况,从而导致程序的错误或者异常。因此,在编程中需要经常处理无效或者多余的括号。
无效的括号指的是不匹配的或者多余的括号。例如,以下字符串就包含了一个无效的括号:
(a+b)*(c-d))/(x+y)
在这个字符串中,“/”之前的括号并没有被匹配,因此是无效的。此外,如果一个字符串中包含多余的括号,例如:
((a+b)*(c-d))
那么也可以认为这些括号是无效的,因为它们并没有起到起本应起到的功能。
要删除无效的括号,我们需要遍历字符串,同时记录括号的状态。当我们遇到一个左括号时,将其压入栈中;当我们遇到一个右括号时,将栈中最后一个左括号弹出。如果某个右括号没有对应的左括号,则将其删除。
当遍历完整个字符串后,如果栈中仍然有剩余的左括号,说明这些左括号并没有被匹配到,因此也需要被删除。
以下是一个删除无效括号的 Python 实现:
def remove_invalid_parentheses(s: str) -> str:
stack = []
indices_to_remove = set()
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
elif s[i] == ')':
if not stack:
indices_to_remove.add(i)
else:
stack.pop()
indices_to_remove = indices_to_remove.union(set(stack))
result = ''
for i in range(len(s)):
if i not in indices_to_remove:
result += s[i]
return result
删除无效的括号可以避免程序出现异常和错误,并且在一些应用中也是很有必要的。我们可以通过维护一个栈来记录左括号,这样可以方便地判断括号是否匹配,并删除无效的括号。