給你乙個字串s
,請你將s
分割成一些子串,使每個子串都是回文。
返回符合要求的最少分割次數。
示例 1:
輸入:s = "aab"輸出:1解釋:只需一次分割就可將 s 分割成 ["aa","b"] 這樣兩個回文子串。示例 2:
輸入:s = "a"輸出:0示例 3:
輸入:s = "ab"輸出:1這個需要用到兩次動態規劃,第二次沒有必要搭建二維陣列。一位陣列夠用了,可以減小時間複雜度。
from typing import *
import sys
class solution:
def mincut(self, s: str) -> int:
n = len(s)
dp1 = [[false] * n for _ in range(n)]
for i in range(n - 1, -1, -1):
for j in range(i, n):
if i == j:
dp1[i][j] = true
elif i == j - 1:
dp1[i][j] = s[i] == s[j]
else:
dp1[i][j] = dp1[i + 1][j - 1] and s[i] == s[j]
dp2=[n]*n
for i in range(n):
if dp1[0][i]:
dp2[i]=0
else:
for j in range(i):
if dp1[j+1][i]:
dp2[i]=min(dp2[i],dp2[j]+1)
return dp2[-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 考慮列舉...