LeetCode 132 分割字串2

2021-10-21 09:51:25 字數 1109 閱讀 1941

給你乙個字串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 考慮列舉...