本題要求最少分割次數,首先要列出子串行是否為回文串的表,可以通過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 考慮列舉...