動態規劃 回文串最小分割數

2021-08-07 18:20:03 字數 1181 閱讀 6782

題目:

給定乙個字串str,返回把str全部切成回文子串的最小分割數。

舉例:

str="aba" ,不需要切割,返回0;

str="acdcdcdad",最少需要切兩次,比如"a","cdcdc","dad",所以返回2.

解題思路:

動態規劃

狀態定義:

dp[i]:表示子串(0,i)的最小回文切割數,則最優解在dp[s.length-1]中。(0,i)的子串中包括了i+1個字元,最多分割i次。

狀態轉移定義

1.初始化:當字串str[0]--str[i](包括i位置的字元)是回文時,dp[i] =0(表示不需要分割);否則,dp[i] = i(表示至多分割i次);

2.對於任意大於1的i,如果str[j]--str[i]( 1<=j<=i ,即遍歷i之前的每個子串)是回文時,dp[i] = min(dp[i], dp[j-1]+1); 

(注:j不用取0是因為若j == 0,則又表示判斷(0,i))。

**:#include #include #include #includeusing namespace std;

bool ispalindrome(const char* str, int begin, int last)//判斷str[begin]--str[last]是否為回文串

} }cout<

動態規劃 回文最少分割

題目描述 題目鏈結 給定乙個字串,返回把str全部切割成回文串的最少切割數。輸出包含一行字串,長度1 5000 輸出乙個整數,代表把str全部切割成回文串的最小切割數。aba本身是回文串,不需要切割,直接輸出0 abcbaeee 切割1次,變為 abcba 和 eee 時間複雜度o n 2 額外空間...

動態規劃 回文詞

from zossin 回文詞 國際資訊學奧林匹克競賽 ioi 競賽原題 描述 description 回文詞是一種對稱的字串 也就是說,乙個回文詞,從左到右讀和從右到左讀得到的結果是一樣的。任意給定乙個字串,通過插入若干字元,都可以變成乙個回文詞。你的任務是寫乙個程式,求出將給定字串變成回文詞所需...

動態規劃 回文子串的長度

給定乙個字串,求其最長的回文子串的長度。如字串 abcdcba 的最長回文子串長度為7,而 aebfcgdhcibja 的最長回文也是 abcdcba 長度也是7.分析 典型的動態規劃問題,用dp i j 記錄字串中從字元 i 到字元 j 中最長回文子串的長度,則 if s.charat i s.c...