最長回文子串(manacher演算法實現)

2021-06-09 05:43:23 字數 529 閱讀 6084

#include

using namespace std;

#define m 1000

void manacher(char *str,char*maxpalindrome )//str接受原始字串  maxpalindrome儲存最長回文子串

cout< i )

rad[i] = rad[2*id-i]<(mx-i)?rad[2*id-i]:(mx-i);       

else

rad[i] = 1;//回文半徑至少是1

for(; temp[i+rad[i]] == temp[i-rad[i]]; rad[i]++);//找到最大回文半徑

if( rad[i] + i > mx )//向右延伸位置大於了前乙個字元的回文串的向右最大延伸位置 重新整理最大延伸位置

}for(i=1;imaxrad)

}//根據回文半徑和出現最大回文半徑的位置,把最長回文子串拷貝出來

for(i=0,j=position-maxrad+1;j

int main()

O n 時間求 最長回文子串 Manacher演算法

回文字串分為奇回文和偶回文,在字串中間插入任意字元使得串變成奇回文串 暴力思想 肯定是找乙個點往兩邊任意擴充套件,遍歷一次,manacher時間為o n 開乙個陣列p記錄 以點i為中點 的最長回文串的半徑,假設前i 1個點的p都已經求出來來,現在考慮p i 如何推導 重點 r是p 1 p i 1 中...

Manacher 最長回文子串

最長回文子串問題 給定乙個字串,求它的最長回文子串長度。如果乙個字串正著讀和反著讀是一樣的,那它就是回文串。下面是一些回文串的例項 12321 a aba abba aaaa tattarrattat 牛津英語詞典中最長的回文單詞 對於最長回文子串問題,最簡單粗暴的辦法是 找到字串的所有子串,遍歷每...

Manacher 最長回文子串

caioj任意門 hz2016評測傳送門 可以的話來一下hz2016評測吧,有的題caioj沒有的我也可以給到資料嘛。include include include include include include include include define maxchar 100000 defin...