刪除無效的括號

2021-09-25 14:29:27 字數 2177 閱讀 3636

回溯,深度搜尋

給定字串:①首先求出不匹配的左括號數和右括號數。

②在深度搜尋過程中去除不匹配的符號,舉例()())()

③當左括號數等於右括號數時,判斷是否匹配

class solution(object):

def removeinvalidparentheses(self, s):

""":type s: str

:rtype: list[str]

"""self.res=

left=0

right=0

#求出不匹配的左括號數和右括號數

for i in s:

if i=="(":

left+=1

if i==")":

if left>0:left-=1

else: right+=1

self.dfs(s,0,left,right)

return self.res

return list(set(self.res))

def dfs(self,s,st,l,r):

if l==0 and r==0:

if self.check(s):

return

for i in range(st,len(s)):

if i-1>=st and s[i]==s[i-1]:continue #去除重複,例如()())()中的位置3和4

if l>0 and s[i]=="(":

self.dfs(s[0:i]+s[(i+1):],i,l-1,r)

if r>0 and s[i]==")":

self.dfs(s[0:i]+s[(i+1):],i,l,r-1)

#去掉左括號數等於右括號數,但是不匹配的組合,例如()())(

def check(self,s):

cnt=0

for i in s:

if i=="(":

cnt+=1

if i==")":

cnt-=1

if cnt<0:

return false

return cnt==0

採用兩個方向處理字串,首先從做到右,然後從右到左。

class solution(object):

def removeinvalidparentheses(self, s):

""":type s: str

:rtype: list[str]

"""removed = 0

results =

count =

#從左到右,去除不匹配的右括號

for i, c in enumerate(s):

if c == ")" and count["("] == count[")"]:

new_results = set()

while results:

result = results.pop()

new_results |=

results = new_results

removed += 1

else:

if c in count:

count[c] += 1

count =

i = len(s)

ll = len(s) - removed

#從右到左,去除不匹配的左括號

for ii in range(ll - 1, -1, -1):

i -= 1

c = s[i]

if c == "(" and count["("] == count[")"]:

new_results = set()

while results:

result = results.pop()

new_results |=

results = new_results

ll -= 1

else:

if c in count:

count[c] += 1

return list(results)

刪除無效的括號

刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 1 輸入 輸出 示例 2 輸入 a 輸出 a a 示例 3 輸入 輸出 public list removeinvalidparentheses string s 如果遇到右擴號 if s....

LeetCode BFS 刪除無效的括號

刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 輸入 輸出 輸入 a 輸出 a a 輸入 輸出 class solution if isvalid s return queueq unordered setlookup 記錄字串是否被訪問...

301 刪除無效的括號(BFS)

刪除最小數量的無效括號,使得輸入的字串有效,返回所有可能的結果。說明 輸入可能包含了除 和 以外的字元。示例 1 輸入 輸出 示例 2 輸入 a 輸出 a a 示例 3 輸入 輸出 思路 廣度優先 bfs 廣度優先 bfs public listremoveinvalidparentheses st...