leetcode301. Remove Invalid Parentheses
Posted seyjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode301. Remove Invalid Parentheses相关的知识,希望对你有一定的参考价值。
题目如下:
解题思路:还是这点经验,对于需要输出整个结果集的题目,对性能要求都不会太高。括号问题的解法也很简单,从头开始遍历输入字符串并对左右括号进行计数,其中出现右括号数量大于左括号数量的情况,表示这个区间是不合法的,需要删掉一个右括号;遍历完成后,如果左括号数量大于右括号的数量,那么需要删除左括号,直至两者相等。
代码如下:
class Solution(object): def removeInvalidParentheses(self, s): """ :type s: str :rtype: List[str] """ queue = [(s,0)] res = [] dic = {} while len(queue) > 0: qs,count = queue.pop(0) left = right = 0 flag = False for i,v in enumerate(qs): if v == \'(\': left += 1 elif v == \')\': right += 1 if right > left: for j in range(i+1): if qs[j] == \')\': newqs = qs[:j] + qs[j+1:] if (newqs, count + 1) not in queue: queue.append((newqs,count+1)) flag = True break if flag == True: continue if left == right: if qs not in dic: dic[qs] = 1 if len(res) == 0: res.append((qs,count)) else: if res[-1][1] > count: res = [(qs,count)] elif res[-1][1] == count: res.append((qs,count)) else: continue else: for j, v in enumerate(qs): if v == \'(\': newqs = qs[:j] + qs[j+1:] if (newqs,count+1) not in queue: queue.append((newqs,count+1)) ans = [] for i in res: ans.append(i[0]) return ans
以上是关于leetcode301. Remove Invalid Parentheses的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode题301—Remove Invalid Parentheses
leetcode 301-Remove Invalid Parentheses(hard)
[leetcode]301. Remove Invalid Parentheses 去除无效括号
[LeetCode] 301. Remove Invalid Parentheses 移除非法括号