leetcode 131 分割回文串

2021-10-25 16:57:23 字數 1090 閱讀 5381

自己學習回顧所用,這是官方給的答案

題目:aab

1、搜尋+回溯法列舉出所有可能的回文子串,假設在s[0…i]已經判斷出所有的回文子串,分割的答案放已經放入陣列ans中,所以需要列舉出下乙個回文串的右邊界j,使得是s[i,…j]是乙個回文串。

2、從i 開始,依次列舉j。對於當前列舉的j值,使用雙指標方法判斷s[i…j]是否為回文串:如果是s[i…j]是回文串,將答案寫入ans陣列中,j+1處理下一層搜尋,並在未來的回溯時將s[i…j]從ans中移除。

3、由於雙指標會產生重複計算,對每個s[i…j]進行回文串預處理,使用動態規劃。設f(i,j)表示是s[i…j]是否為回文串,狀態轉移方程:

官方答案

class

solution

:def

partition

(self, s:

str)

-> list[list[

str]]:

n =len(s)

f =[[

true

]* n for _ in

range

(n)]

for i in

range

(n -1,

-1,-

1):for j in

range

(i +

1, n)

: f[i]

[j]=

(s[i]

== s[j]

)and f[i +1]

[j -1]

ret =

list()

ans =

list()

defdfs

(i:int):

if i == n::]

)return

for j in

range

(i, n)

:if f[i]

[j]:1]

) dfs(j +1)

ans.pop(

) dfs(0)

return ret

Leetcode131 分割回文串

給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 所有可能的分割方案。示例 輸入 aab 輸出 aa b a a b public list partition string s partition s,0 new arraylist res return res index...

LeetCode 131 分割回文串

給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回 s 所有可能的分割方案。示例 輸入 aab 輸出 aa b a a b 思路 回溯法 注意回溯的位置 class solution object def partition self,s type s str rtype list...

LeetCode 131 分割回文串

返回 s 所有可能的分割方案。分析 首先要用動態規劃來標記出回文子串的位置,dp i j true表示字串i到j是回文。因此動態規劃判斷時候是用的 dp i j s i s j len 3 dp i 1 j 1 表示當len 3時候只需要判斷兩個端點,其他時候還要判斷中間是否是回文子串。然後使用回溯...