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

2021-09-22 09:01:50 字數 1105 閱讀 4760

時間限制:

3000 ms | 記憶體限制:

65535 kb

難度:4

描述

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。當然,我們給你的問題不會再簡單到判斷乙個字串是不是回文字串。現在要求你,給你乙個字串,可在任意位置新增字元,最少再新增幾個字元,可以使這個字串成為回文字串。

輸入第一行給出整數n(0

輸出每行輸出所需新增的最少字元數

樣例輸入

1

ab3bd

樣例輸出

2
一道動態規劃題,輔助空間cost[i][j]表示要將從s[j]個字元開始長度為i的子串變為對稱串需要新增的字元個數;這樣,動態方程為:

cost[0][i] = cost[1][i] = 0;//長度為0和長度為1的串

cost[i][j] = 當s[j] == s[i+j-1]時,字串長度加2,需要增加的字元個數相同,即cost[i][j] = cost[i-2][j+1];

否則,cost[i][j] = min + 1;

**如下:

1 #include

2 #include

3 #include

4using

namespace std;

5char s[1002];

6int f[1001][1001];

7int main()

8 21

for(i = 2; i <= n; i++)

22for(j = 0; j < n; j++)

23

28else

if(f[i-1][j] < f[i-1][j+1])

29

32else f[i][j] = f[i-1][j+1] + 1;

33 }

34 printf("

%d\n

", f[n][0]);

35 }

36return

0;37 }

動態規劃 最長回文字串

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

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

問題一 求乙個字串的最大回文字串長度 1 思路 動態規劃 2 具體描述 設立乙個長度len為字串str,用乙個dp len len 的二維陣列來表示字串i j下標所構成的子串的長度,經過迴圈計算之後我們返回最大回文子串的長度即可,即返回dp 0 len 1 3 dp陣列的具體實現 根據動態規劃自底向...

動態規劃(5) 最長回文字串

給出乙個字串s,求s 的最長回文子串 連續 的長度。輸入 patzjujztaccbcc 輸出 9 最優子結構 如atzjujzta是回文子串,那麼它字串tzjujzt一定是回文子串,且長度等於tzjujzt的長度 2 重複子問題 如求atzjujzta和tzjujzt的長度,都會用到juj的長度 ...