動態規劃實現回文字串問題

2021-09-08 06:55:33 字數 1344 閱讀 9730

問題一:求乙個字串的最大回文字串長度;

1)思路:動態規劃;

2)具體描述:設立乙個長度len為字串str,用乙個dp[len][len]的二維陣列來表示字串i-j下標所構成的子串的長度,經過迴圈計算之後我們返回最大回文子串的長度即可,即返回dp[0][len-1];

3)dp陣列的具體實現:根據動態規劃自底向上的思想,從回文子串到求出整個最長回文字串,首先從str的結尾開始遍歷到str 的頭部,同時每一次記錄dp的初始值;如果str[i]==str[j],說明i-j為回文字串,此時應該更新dp[i][j]的值;如果str[i]≠str[j],應該判斷dp[i+1][j]和dp[i][j-1]的大小,取出其中max作為最大長度更新dp[i][j]的值

4)**實現

1

static

intlongestpalindrome1(string str) else11}

12}13return dp[0][len-1];

14 }

5)測試結果:測試字串12abcbdabadbcba34的最大回文串,我們可以看出最大回文串為abcbdabadbcbab,長度為13

問題二:將上述問題修改為輸出最長回文子串

1)我們知道,動態規劃最優解的子問題同樣也是最優解,即最長回文字串的子串也是回文串,假設p[i][j]是回文字串,那麼p[i+1][j-1]也是回文字串,這樣最長回文字串就能夠分解成為一系列子問題來求解。

2)**實現

1

static

string longestpalindrome2(string str) 11}

1213

for (int i = 3; i < str.length(); i++) 21}

22}23return str.substring(start,start+maxlen-1);

24 }

2)測試輸入:同樣是將上述測試用例,測試字串12abcbdabadbcba34的最大回文串,我們可以看出最大回文串為abcbdabadbcbab

posted @

2018-12-01 01:12

風沙迷了眼 閱讀(

...)

編輯收藏

動態規劃 最長回文字串

題目 請從乙個已知的字串中尋找最長回文字串 解法1 動態規劃 回文字串的子串也是回文,比如p i,j 表示以i開始以j結束的子串 是回文字串,那麼p i 1,j 1 也是回文字串。這樣最長回文子串就能分解成一系列子問題了。這樣需要額外的空間o n 2 演算法複雜度也是o n 2 狀態方程和轉移方程 ...

回文字串(動態規劃解法)

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如 aba 當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文...

動態規劃問題 最長回文串 Python實現

基本思路是對任意字串,如果頭和尾相同,那麼它的最長回文子串一定是去頭去尾之後的部分的最長回文子串加上頭和尾。如果頭和尾不同,那麼它的最長回文子串是去頭的部分的最長回文子串和去尾的部分的最長回文子串的較長的那乙個。p i,j p i,j 表示第i到第j個字元的回文子串數 dp i,i 1 dp i,j...