📜  删除无效的括号(1)

📅  最后修改于: 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
总结

删除无效的括号可以避免程序出现异常和错误,并且在一些应用中也是很有必要的。我们可以通过维护一个栈来记录左括号,这样可以方便地判断括号是否匹配,并删除无效的括号。