給定乙個字串str,返回把str全部切割為回文子串的最小分割數。
該題可以使用動態規劃的思想來解決。首先要明確好dp[i]的概念,即從str的首個位置開始到第i個位置要切割為回文子串的最小分割數。最後的dp[str.length()-1]就是題目的結果。
要求出dp[i]的值就需要遍歷陣列str(0~i),假設0~i之間的某個值j,char[j] == char[i]。在檢查j+1~i-1之間的字串是否構成回文字串,如滿足條件則dp[i] = dp[j-1] + 1。否則將繼續往下遍歷。
注意:
首個字元的dp需要設定為0。
1位置上的dp值需要對0,1位置的字元進行判斷,若char[0] == char[1]則dp[1] = 0,否則dp[1] = 1.
需要輔助的boolean陣列map對兩個位置間是否為回文字串進行判斷。
/*** 回文最少分割數
*/public int gettheleastsplit(string str){
if(str == null || str.length() == 0)
return 0;
boolean map = new boolean [str.length()][str.length()];
int min = integer.max_value;
int dp = new int[str.length()];
dp[0] = 0;
if(str.length() >= 2)
dp[1] = str.charat(0) == str.charat(1) ? 0: 1;
for(int i=2;i
回文最少分割數
題目 給定乙個字串str,返回把str全部切成回文子串的最小分割數。舉例str aba 本身是回文串,所以不需要切割,返回0。str acdcdcdad 最少需要切2次變成3個回文子串,比如 a cdcdc dad 返回2。解答經典動態規劃。定義動態規劃陣列dp,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 額外空間...