給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。
返回符合要求的最少分割次數。
示例:
輸入: 「aab」解法一:沿用分割會文串 的方法,將所有可能的結果列舉出來,然後選擇長度最小的即可。輸出: 1
解釋: 進行一次分割就可將 s 分割成 [「aa」,「b」] 這樣兩個回文子串。
親測,超時。
解法二:動態規劃。
這種題,首先要考慮的就是動態規劃。為什麼?假如給定 「aa」 的最小分割次數,則給定 「aab」 便是在 「aa」 的基礎上,觀察 『b』 與之前字串的關係來確定 「aab」 的最小分割次數。
即,我們可以把問題轉化為最優子結構之間的關係。
開闢向量 dp, 其中 dp[i] 儲存的是 s[0,…,i] 的最小切割次數。
遍歷字串,對於每個字元,從前向後檢查(第二重 for 迴圈)能否與之前的字串組成回文串,若能,則更新;否則,continue.
**:
class
solution
intmincut
(string s)
return dp.
back()
;}};
當然,上述**的執行時間到達了 o(n^3), 雖然 ac, 但有很大的優化空間。
如何優化?
中心擴充套件法。
21 3 8 力扣每日刷題 分割回文串
給你乙個字串 s,請你將 s 分割成一些子串,使每個子串都是回文。返回符合要求的 最少分割次數 示例 1 輸入 s aab 輸出 1 解釋 只需一次分割就可將 s 分割成 aa b 這樣兩個回文子串。示例 2 輸入 s a 輸出 0 示例 3 輸入 s ab 輸出 1 1 s.length 2000...
132 分割回文串 II
給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。返回符合要求的最少分割次數。示例 輸入 aab 輸出 1 解釋 進行一次分割就可將 s 分割成 aa b 這樣兩個回文子串。解法一 public class solution else return dp 0 解法二 如果從分割字串的角...
108 分割回文串 II
中文english 給定字串s,需要將它分割成一些子串,使得每個子串都是回文串.最少需要分割幾次?樣例 1 輸入 a 輸出 0 解釋 a 本身就是回文串,無需分割樣例 2 輸入 aab 輸出 1 解釋 將 aab 分割一次,得到 aa 和 b 它們都是回文串.大致思路 動態規劃 l len s 1....