回文最少分割數

2021-10-08 15:23:49 字數 675 閱讀 4470

題目

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