自学内容网 自学内容网

leetcode-301. 删除无效的括号

题目描述

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。

返回所有可能的结果。答案可以按 任意顺序 返回。

示例 1:

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

示例 2:

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

示例 3:

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

思路

回溯+剪枝,参考:. - 力扣(LeetCode)代码使用的是官方第一种解法

1)先遍历字符串,分别找到左,右括号的异常个数

2)写一个函数,用来判断当前字符串是否是有效的括号

3)回溯,先写终止条件;两次的剪枝操作;左,右括号的回溯

ps:加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯

class Solution(object):
    # 判断是否为有效括号
    def isvalid(self, s):
        cnt = 0
        for i in s:
            if i=='(':
                cnt+=1
            elif i==')':
                cnt-=1
                if cnt<0:
                    return False
        return cnt == 0
   # 回溯
    def huisu(self, s,left_remove,right_remove,res,start):
        if left_remove==0 and right_remove==0:
            if self.isvalid(s):
                res.append(s)
            return
        for i in range(start, len(s)):
            if i>0 and s[i]==s[i-1]:
                continue
            if left_remove+right_remove > len(s)-i:
                break
            if left_remove>0 and s[i]=='(':
                self.huisu(s[:i]+s[i+1:],left_remove-1,right_remove,res,i)
            if right_remove>0 and s[i]==')':
                self.huisu(s[:i]+s[i+1:],left_remove,right_remove-1,res,i)
    def removeInvalidParentheses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        # 找到异常的左右括号数
        res = []
        left_remove = 0
        right_remove = 0
        for i in s:
            if i == '(':
                left_remove+=1
            elif i == ')':
                if left_remove==0:
                    right_remove+=1
                else:
                    left_remove-=1
        # 加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯
        self.huisu(s,left_remove,right_remove,res,0)
        return res


if __name__ == '__main__':
    s = Solution()
    # ss = "()())()"
    # ss=')('
    ss = ")(f"
    print(s.removeInvalidParentheses(ss))

原文地址:https://blog.csdn.net/m0_38098373/article/details/142861282

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!