動態規劃之最長回文子串行

2021-06-23 03:43:22 字數 1023 閱讀 2263

15-2(最長回文子串行) 回文(palindrome)是正序與逆序相同的非空字串。例如,所有長度為1的字串,civic,racecar,aibohphobia都是回文。設計高效演算法,求給定輸入字串的最長回文子串行。例如,給定輸入character,演算法應該返回carac.演算法的執行時間是怎麼樣的?

解題思路:首先我們要注意的是題目要求求出最長回文子串行,而不是子串。如果是子串,比如abcdebca,該回文子串長度為1,是其中任意乙個字元,而回文子串行是abcdbca(abcebca).所以求子串和子串行有一些不同。以下方法只適用求子序列,求子串方法由於題目沒有要求,這裡暫且不提了。(ps:有些人可能不清楚子串和子串行的區別,這是要特別注意的問題。)

具體方法:只要把原字串逆轉後和原字串比較並且利用求最長公共子串行的方式求出的lcs即可得到最長回文子串行。也就是說 求出的lcs=最長回文子串行。

**如下

#include using namespace std;

#define n 9//輸入您要判斷的字串字元數

char*strreversal(char*str)

else

}} }

}void print_lcs(char*x,int i,int j)

if (b[i][j]=="↖")

y[i]='\0';x[i]='\0';

strreversal(y);//反轉字串

cout樣例輸出:

最後總結:求lcs需要o(n²)時間,求字串的逆轉需要o(n)時間,總得來說本程式只需要o(n²)時間。這個問題還是較為簡單的,僅僅是把書中例子改改即可得到所需結果。



動態規劃之最長回文子串

問題 給出乙個字串s,求s的最長回文子串的長度。樣例 字串 patzjujztaccbcc 的最長回文子串為 atzjujzta 長度為9。還是先看暴力解法 列舉子串的兩個端點i和j,判斷在 i,j 區間內的子串是否回文。從複雜度上來看,列舉端點需要0 n2 判斷回文需要0 n 因此總複雜度是o n...

動態規劃之最長回文子串

問題 給出乙個字串s,求s的最長回文子串的長度。結果 字串 patzjujztaccbcc 的最長回文子串為 atzjujzta 長度為9。暴力解法 列舉子串的兩個端點i和j,判斷在 i,j 區間內的子串是否回文。從複雜度上來看,列舉端點需要0 n2 判斷回文需要0 n 因此總複雜度是o n3 動態...

動態規劃 最長回文子串行

之前並沒有想過求解 最長回文子串行 的方法,但是自己想想也是沒有什麼好的辦法可以求出 最長回文子串行 來,而最近遇到了一道題目,在經過問題分析,轉化之後,其根本的問題就是 最長回文子串行 的求解問題。題意 兩隻兔子在乙個由n個數字組成的環上,乙隻只能順時針跳,另乙隻只能逆時針跳。跳的規則如下 1 以...