108 分割回文串 II

2022-02-15 00:06:59 字數 1815 閱讀 3272

中文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]:

class

solution:

""" @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內...