题解
思路
代码
class Solution:
### 0124 BFS(156 ms,15.2 MB)
def removeInvalidParentheses(self, s: str) -> List[str]:
# 判断当前字符串是否合法
def isValid(s):
cnt = 0
for c in s:
if c == '(': cnt += 1
elif c == ')': cnt -= 1
# cnt一旦小于0,则已经出现了无效的括号
if cnt < 0: return False
return cnt == 0 # 最后返回cnt是否为0,即s是否合法
level = {s}
while True:
# 判断当前level中每一个字符串的合法性
valid = list(filter(isValid, level))
# 若已经存在合法的字符串,则返回
if valid: return valid
# 若上一层不存在合法的字符串
# 则新建集合(用于去重)来进行下一层搜索判断
next_level = set()
for sub in level:
for i in range(len(sub)):
# 若当前字符c是括号的组成部分,则去掉此半个括号
# 加入字符串集合中,用于下一轮的遍历判断
# 这里不考虑合法性,单纯是暴力搜索操作
if sub[i] in '()':
next_level.add(sub[:i] + sub[i+1:])
# 下一轮的字符串集合
level = next_level