題目37 回文字串

2021-08-08 19:32:27 字數 509 閱讀 1770

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

第一行給出整數n(0每行輸出所需新增的最少字元數

1 ab3bd

2是一道經典的動態規劃演算法,演算法思想與最大公共子串一樣,技巧就是將這個問題轉換成乙個最大公共子串問題。將輸入str的字串逆轉記為s,接下來的問題就變成求str和s的最大公共子串的長度,然後用str的長度len減去最大公共子串的長度,得到的差即為需要新增最少的字元數。

最大公共子串長度的遞推公式如下: dp

[i][

j]= else

old = tmp;}}

cout

<< len - dp[len - 1] << endl;

}return

0;}兩層迴圈遍歷,演算法時間複雜度為o(n^2)。

NYOJ題目37 回文字串

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

NYOJ 37 回文字串

思想 在紙上測試幾組資料,發現先逆轉原來的字串,再用原來的字串跟逆轉後的字串進行比較,求得的最長公共子串行就是回文串,也就是不需要新增的,再用總長度減去最長公共子串行就可以得到最少需要新增的字元數。就簡單了,以前寫過的稍稍改下就直接貼上來了。include includeint f 1001 100...

nyoj 37 回文字串

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