最長回文子串

2021-07-11 15:44:59 字數 760 閱讀 5738

問題描述:

對於乙個字串,請設計乙個高效演算法,計算其中最長回文子串的長度。給定字串a以及它的長度n,請返回最長回文子串的長度。

測試樣例:

"abc1234321ab",12

返回:7

暴力法:使用兩層迴圈找到所有子串,第三層迴圈判斷子串是否是回文。方法的時間複雜度為o(n^3),空間複雜度為o(1)。

動態規劃:開闢乙個f(i,j)表示s[i..j]的最長回文子串行,狀態轉移方程如下:

當i>j時,f(i,j)=0。

當i=j時,f(i,j)=1。

當i這個方法的時間複雜度為o(n^2),空間複雜度為o(n^2),比暴力法有很大的改進。

中心擴充套件:對於每乙個回文子串可以先確定乙個中心,然後向兩邊擴充套件,這樣可以在時間複雜度o(n^2),空間複雜度o(1)                                         的情況下完成,需要注意的是,長度為奇數和偶數的中心的情況是不同的。

manacher:是一種線性時間的方法,非常巧妙。首先,我們在上面的方法都要考慮回文長度為奇數或者偶數的情況。這個 方法引入乙個技巧,使得奇數和偶數的情況統一處理了。具體做法參考:

使用 manacher方法實現的ac**:

class palindrome }}

else }}

int max=0;

for(int j=0;j

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

最長回文子串

描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000,且單獨佔一行 如果...

最長回文子串

輸入乙個字元,求出其中最長的回文子串。子串的含義是 在元串中連續出現的字串片段。回文的含義是 正看和倒看相同,如abba和yyxyy,在判斷時候應該忽略所有的空格和標點符號,且忽略大小寫,但輸出應該保持原樣,輸入的字元長度不超過5000,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...