题目描述:
给你一个由若干括号和字母组成的字符串 s
,删除最小数量的无效括号,使得输入的字符串有效。
返回所有可能的结果。答案可以按 任意顺序 返回。
示例:
输入:s = "()())()" 输出:["(())()","()()()"]
BFS思路解析:
本算法采用BFS的思想,对字符串进行广度优先搜索时,每次保存上一轮搜索的结果,然后对上一轮已经保存的结果中的每一个字符串尝试所有可能的删除一个括号的方法,然后将保存的结果进行下一轮搜索。
比如:输入:s = '((()'
对字符串进行删除可能出现的所有情况有:'(()' '(()' '(()' '((('
(注:需去掉重复情况, python中可使用集合进行去重)
去掉重复结果的下一轮搜索结果为:{ '(()' '(((' }
对该结果进行有效性判断,若存在有效即为删除最小数量的无效括号,使得输入的字符串有效。否则,继续重复上述步骤。
代码:
class Solution:
def removeInvalidParentheses(self, s: str) -> List[str]:
def isvalid(string): # 判断字符串是否有效
count = 0
for s in string:
if s == '(':
count += 1
elif s == ')':
count -= 1
if count < 0:
return False
return count == 0
crustr = {s}
while True:
a= list(filter(isvalid, crustr))
nextstr = list(filter(isvalid, crustr))
if nextstr:
return nextstr
nexts = set()
for s in crustr:
for i in range(len(s)):
if s[i] == '(' or s[i] == ')':
nexts.add(s[:i] + s[i+1:])
crustr = nexts