中文english
給定字串s
, 需要將它分割成一些子串, 使得每個子串都是回文串.
最少需要分割幾次?
樣例 1:
輸入: "a"
輸出: 0
解釋: "a" 本身就是回文串, 無需分割
樣例 2:
輸入: "aab"
輸出: 1
解釋: 將 "aab" 分割一次, 得到 "aa" 和 "b", 它們都是回文串.
大致思路:
動態規劃
l = len(s)
1.確定狀態
最後一步:d[l-1]
子問題:d[i-1] = min(dj] + 1,d[i-1])
2.轉移方程
d[i] = min(d[j] + 1 , d[i])
3.初始條件和邊界情況
d = [sys.maxsize]*(l+1)
d[0] = 0
存在一種邊界情況,是aaaaa這種,一直都是0,不同於bbbaa,bbb + aa 需要加1
if s[:i] == s[:i][::-1]:
d[i] = 0
continue
current_s = s[j:i]
if current_s == current_s[::-1]
4.計算順序
for i in range(1,l+1):
for j in range(i):
if s[j:i] == s[j:i][::-1]:
classsolution:
""" @param s: a string
@return: an integer
"""def mincut(self, s):
# write your code here
if not s:return
0#初始條件
l =len(s)
d = [sys.maxsize]*(l+1
) d[
0] = 0
#計算順序
for i in range(1,l+1
):
if s[:i] == s[:i][::-1
]: d[i] = 0
continue
for j in
range(i):
cut_s =s[j:i]
#邊界情況
if cut_s == cut_s[::-1
]: d[i] = min(d[j] + 1
,d[i])
return d[l]
132 分割回文串 II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。解法一 public class solution else return dp 0 解法二 如果從分割字串的角...
132 分割回文串 II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。1.我最開始想到了要兩次dp,先算乙個是否是回文數的dp陣列,再算所求的dp。但第二個dp陣列我用的二維陣列,然...
leetcode132 分割回文串II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。01揹包 給定num個物品,每種物品都有自己的重量 wi 和價值 vi,且都為整數,在限定的總重量weight內...