時間限制:
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 #include2 #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的長度 ...