Skip to the content.

leetcode [301] 删除无效的括号


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。

说明: 输入可能包含了除 ( 和 ) 以外的字符。

示例 1:

输入: "()())()"
输出: ["()()()", "(())()"]

示例 2:

输入: "(a)())()"
输出: ["(a)()()", "(a())()"]

示例 3:

输入: ")("
输出: [""]

思路来自题解:

每次对字符串删除一个括号,生成不同的候选,如果有合法的,那么就是答案,否则,继续对候选删除括号。

class Solution:
    def removeInvalidParentheses(self, s: str) -> List[str]:
        level = {s}
        while True:  # BFS
            valid = [lev for lev in level if self.check(lev)]
            if valid:
                return valid
            level = {s[:i] + s[i + 1:] for s in level for i in range(len(s)) if s[i] in '()'}

    def check(self, s):
        count = 0
        for c in s:
            if c == '(':
                count += 1
            if c == ')':
                count -= 1
                if count < 0:
                    return False
        return count == 0