leetcode 132 記憶化搜尋 dp

2021-10-21 09:59:33 字數 794 閱讀 3947

本題要求最少分割次數,首先要列出子串行是否為回文串的表,可以通過dp或者記憶化實現。之後要定義子結構,我們可以發現,當新字母來了時,我們要考慮有沒有新的回文串,所以只要列舉所有新的回文串,再和dp陣列加起來作比較即可。

class

solution

:def

mincut

(self, s:

str)

->

int:

@cache

defdfs(i, j)

:if i >= j:

return

1if s[i]

== s[j]

:return dfs(i+

1, j-1)

else

:return

0 dp =

[3000

for _ in s]

for i, c in

enumerate

(s):

if dfs(

0, i)

: dp[i]=0

continue

for j in

range(1

, i+1)

:if dfs(j, i)

and dp[i]

> dp[j-1]

+1: dp[i]

= dp[j-1]

+1dfs.cache_clear(

)return dp[-1

]

leetcode132 分割回文串II

給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。01揹包 給定num個物品,每種物品都有自己的重量 wi 和價值 vi,且都為整數,在限定的總重量weight內...

leetcode132分割回文字串

給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。1.遞迴 回溯 記錄每一次分割所需要的次數,求最小值 如下 class solution void dfs st...

leetcode 132 分割回文串II

1 今天的題目困難,顯然我又不會做 2 在昨天官方答案基礎上稍微做了改動。還是貼出官方答案吧。3 題目思路 求最小的分割次數,既然是分割回文串ii必然和分割回文串i有相通之處,還記得昨天的採用動態規劃嘛,所以可以求解f i 最小分割次數,f i 為s 0 i 之間的最小分割次數,求解f i 考慮列舉...