題目
給定乙個字串str,返回把str全部切成回文子串的最小分割數。
舉例str=「aba」。本身是回文串,所以不需要切割,返回0。
str=「acdcdcdad」。最少需要切2次變成3個回文子串,比如「a」、「cdcdc」、「dad」。返回2。
解答經典動態規劃。定義動態規劃陣列dp,dp[i]的含義是子串str[0…i]至少需要切割幾次,才能把str[0…i]全部切割成回文串,所以dp[len-1]就是最終答案。
從左往右計算dp[i]的值,i初始為1(str[0]是單個字元,很顯然是回文串,不需要切割,所以dp[0]=0),過程如下:
假設當前處在j位置(j<=i讓j在0到i位置上列舉,所有符合情況中的最小值就是dp[i]的值,即dp[i] = min
char
cstr = str.
tochararray()
;int len = cstr.length;
boolean
p =
newboolean
[len]
[len]
;int
dp =
newint
[len]
;for
(int i =
1; i < len; i++)}
}return dp[len -1]
;
回文最少分割數
給定乙個字串str,返回把str全部切割為回文子串的最小分割數。該題可以使用動態規劃的思想來解決。首先要明確好dp i 的概念,即從str的首個位置開始到第i個位置要切割為回文子串的最小分割數。最後的dp str.length 1 就是題目的結果。要求出dp i 的值就需要遍歷陣列str 0 i 假...
回文最少分割數
給定乙個字串,返回把str全部切割成回文串的最少切割數。輸出包含一行字串,代表str 1 leq length leq 5000 1 lengthstr 5000 輸出乙個整數,代表把str全部切割成回文串的最小切割數。示例1 aba0本身是回文串,不需要切割,直接輸出0示例2 abcbaeee1切...
動態規劃 回文最少分割
題目描述 題目鏈結 給定乙個字串,返回把str全部切割成回文串的最少切割數。輸出包含一行字串,長度1 5000 輸出乙個整數,代表把str全部切割成回文串的最小切割數。aba本身是回文串,不需要切割,直接輸出0 abcbaeee 切割1次,變為 abcba 和 eee 時間複雜度o n 2 額外空間...