求最長回文子串

2021-06-29 08:23:20 字數 687 閱讀 4010



1.第一種方法

o(n^2) 動態規劃,用s[i][j]表示從i到j是最長回文字串,用乙個table[i][j]記錄字串從i到j是否為回文,這樣的話,從底部向上,table[i][i]=true;另外如果s[i]==s[i+1],則table[i][i+1]=true,然後長度從3開始,如果s[i-1]==s[j+1],則就能夠推出s[i-1][j+1]的字串了。**如下:

string longestpalindromedp(string s)  

02.;

06. for (int i=0; i

2.第二種方法

用o(n)的思想居然也可以解決,演算法思路就是利用乙個p陣列輔助記錄,p[id]記錄為以str[id]為中心,向右擴充套件p[id]。這裡由於在字串中新增了#,所以最長回文的長度剛好是p[id]-1,如果按照常規的應該是p[id]*2-1,但是由於在每兩個字元之間加了#,所以剛好抵消了。由於這個演算法是線性從前往後掃的。那麼當我們準備求p[i]的時候,i以前的p[j]我們是已經得到了的。我們用mx記在i之前的回文串中,延伸至最右端的位置。同時用id這個變數記下取得這個最優mx時的id值。(注:為了防止字元比較的時候越界,我在這個加了『#』的字串之前還加了另乙個特殊字元『$』,故我的新串下標是從1開始的)

void pk()

} }



求最長回文子串

求最長回文子串,大概有以下幾種方法 1 錯誤!先翻轉再求最長公共子串 例如 abcdafdcba abcd x 即原串中包含翻轉串的子串時 2 暴力 遍歷每個字串,然後判斷是否是回文子串並記錄最長資訊 時間複雜度o n 3 3 動態規劃 時間複雜度o n 2 空間複雜度o n 2 dp i j 表示...

求最長回文子串

利用中心擴充套件法求最長回文子串演算法複雜度為o 待改進 manacher方法,manacher 法將所有的字串全部變成奇數個字元。思想 回文子串一定是個中心對稱的圖形,有的對稱中心是乙個字母比如abcba,有的是對稱中心是兩個字母比如abba。所以需要分開進行 程式中會有體現 利用回文子串的這一特...

求最長回文子串

要求 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解法一 暴力求解法 思想 反轉 s,使之變成 s 找到 s 和 s 之間最長的公共子串,這也必然是...