回文最少分割數

2021-08-15 07:19:49 字數 815 閱讀 5251

給定乙個字串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 額外空間...