給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。
示例:輸入: 「aab」
輸出: 1
解釋: 進行一次分割就可將 s 分割成 [「aa」,「b」] 這樣兩個回文子串。
01揹包
給定num個物品,每種物品都有自己的重量 wi 和價值 vi,且都為整數,在限定的總重量weight內,選擇其中若干個,設計選擇方案使得物品的總價值最高。01揹包是指每個物品只能使用一次。這類揹包問題我們首先要建立乙個二維陣列dp,其中dp[i][j]表示前i件物品在重量不超過j的前提下的最大價值,其中i從1開始,j也從1開始。狀態轉移:
1 第 i 件物品沒新增到揹包時,總重量不超過 j 的前 i 件物品的最大價值就是總重量不超過 j 的前 i-1 件物品的最大價值,即dp[i][j] = dp[i-1][j]。
2 第 i 件物品新增到揹包時,前i-1件物品總重不超過j-w[i]時的最大價值的基礎上加上v[i],即dp[i][j] = dp[i-1][j-wi] + vi
以上兩種情況的選擇取決於誰的價值更大,dp[i][j]= max(dp[i-1][j], dp[[i-1][j-wi]+vi)
邊界條件:
dp[0, j],不管j是多少,肯定為0,因為它表示我們乙個物品都不選擇的情況
dp[i, 0],當我們總重量限制為0時,肯定價值為0
num =
5weight =
10w =[2
,2,6
,5,4
]v =[6
,3,5
,4,6
]# 遞推的時候會用到邊界條件,所以dp的num維上的元素數目要多乙個,表示乙個物體都不選的情況,
# weight維度上面也要多乙個,表示總重量為0的情況
dp =[[
0]*(weight +1)
for _ in
range
(num +1)
]# 依次遍歷num個物品,即從1到num
for i in
range(1
, num+1)
:# 從1開始遞增總重量直到weight
for j in
range(1
, weight+1)
:if w[i-1]
> j:
dp[i]
[j]= dp[i-1]
[j]else
: dp[i]
[j]=
max(dp[i-1]
[j], dp[i-1]
[j-w[i-1]
]+v[i-1]
)print
(dp[num]
[weight]
)# 15
該問題中,設dp[j]為s[:j+1]的最小分割數目,設0<=i<=j,那麼,如果i至j的字串s[i:j+1]為回文,則最小的分割為在dp[i-1]的基礎上+1。由於可能存在多個j使s[i:j+1]為回文,所以,遞推公式為:dp[j]=min(dp[i-1]+1) for i in range(j+1) if s[i:j+1]為回文)
class
solution
:def
mincut
(self, s:
str)
->
int:
n =len(s)
mem =[[
0]*n for _ in
range
(n)]
dp =[0
]*nfor j in
range
(n):
# min_cut 為s[:j+1]的最小分割數目dp[j],該值最大情況為j,最小為0
min_cut = j
for i in
range
(j+1):
if s[i]
== s[j]
and(
(j-i<=2)
or mem[i+1]
[j-1])
: mem[i]
[j]=
1if i ==0:
min_cut =
0else
: min_cut =
min(min_cut, dp[i-1]
+1) dp[j]
= min_cut
return dp[-1
]
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 考慮列舉...
leetCode 132 分割回文串 II
需要進行兩次動態規化,第一次動態規化計算f i j 也就是s i,j 是否是回文串。第二次動態規化設定g i 代表s 0,i 的最小分割次數,如果s 0,i 是回文串,則g i 0,如果不是回文串則 g i g j 1,0 j i,s j 1,i 是回文串。class solution for in...