最長回文子串

2021-07-16 15:14:28 字數 744 閱讀 8424

manacher演算法,o(n)時間複雜度

演算法內容:

時間複雜度分析:

主要思想:

f[i]   表示以i為中心的最長回文串半徑(包含i),考察f[i]與已算出的f[0]~f[i-1]的聯絡

設ji時,有f[i]>=min;否則f[i]>=1. 

使用『#』分隔字串從而把回文串的奇偶兩種情形統一為奇數類回文串

基於上一點,以i為中心的原始最長回文串長度即為f[i]-1

具體實現

/***************************

manacher演算法 o(n)

***************************/

#include

#include

#include

using namespace std;

#define size 2000002

int n, dp[size];

char str[size];

void solve();

void init()

solve(); }}

void solve()

if (i + dp[i] > m_s)

if (max < dp[i]) max = dp[i];

++i;

} cout << max - 1 << endl;

}int main()

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

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,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...