题目:
给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。
解答:
class Solution: def removeInvalidParentheses(self, s: str) -> List[str]: #使用left和right统计出多余的左右括号的数量 n=len(s) left,right=0,0 for c in s: if c=='(': left+=1 elif c==')': if left==0: right+=1 else: left-=1 #判断去除掉left个左括号,right个右括号后,字符串是否有效 def isValid(str): cnt = 0 for c in str: if c == '(': cnt += 1 elif c == ')': cnt -= 1 if cnt < 0: return False return cnt == 0 res=[] #利用回溯算法尝试搜索所有可能的去除括号的方案 def helper(s, start, lremove, rremove): if lremove == 0 and rremove == 0: if isValid(s): res.append(s) return #从s[start:len(s)]中取出lremove个左括号和rromove个右括号 for i in range(start, len(s)): #如果遇到连续相同的括号我们只需要搜索一次即可 if i > start and s[i] == s[i - 1]: continue #如果剩余的字符无法满足去掉的数量要求,直接返回 if lremove + rremove > len(s) - i: break #尝试去掉一个左括号 if lremove > 0 and s[i] == '(': helper(s[:i] + s[i + 1:], i, lremove - 1, rremove) # 尝试去掉一个右括号 if rremove > 0 and s[i] == ')': helper(s[:i] + s[i + 1:], i, lremove, rremove - 1) helper(s, 0, left, right) return res
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)