Manacher 最長回文子串

2021-08-08 14:29:57 字數 799 閱讀 3857

caioj任意門

hz2016評測傳送門

可以的話來一下hz2016評測吧,有的題caioj沒有的我也可以給到資料嘛。#include#include#include#include#include#include#include#include#define maxchar 100000

#define mes(x,y) memset(x,y,sizeof(x));

#define mpy(x,y) memcpy(x,y,sizeof(x))

#define inf 2147483647

using namespace std;

int p[2*maxchar+1];

char s[2*maxchar+1],now[2*maxchar+1];

int manacher()//適時更新pos和r

}int ans=0;

for(int i=1;i<=len;i++)ans=max(ans,p[i]-1);

/* 首先當前的最長回文子串長度為2*p[i]-1

因為我們得到的p陣列是在加了#號後的字串上操作的,所以我們要對答案進行處理

因為#號處於首尾和每個字元之間,所以我們就可以保證所得出的最長回文子串的首尾都為#

這時我們可以得出不帶#號的回文串的長度為(2*p[i]-1-1)/2=p[i]-1

所以真正的最長回文子串就是p[i]-1

ans記錄最長的回文子串長度

*/ return ans;

}int main()

return 0;

}

Manacher 最長回文子串

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

Manacher解決最長回文子串

給定乙個字串,求解該字串的最長回文子串 以字串中的每個字元為中心,列舉其最長的回文子串,注意奇數和偶數長度的子串 int longpalindrome char str return maxlen 該演算法為dp演算法,我們可以儲存上面中心擴充套件的結果來計算後面的點,如下圖 我們用f i 表示以i...

最長回文子串 manacher演算法

像kmp一樣,先來看一道題目 給出乙個長度為n的字串s,求s的子串t,令t反轉後t 與t完全相等,求t最大的長度。首先,可以想到用暴力做,列舉所有的子串,然後判斷,時間複雜度為o n3 第二,可以發現,如果子串s 1.5 是乙個回文串,那麼s 2.4 自然也是乙個回文串。利用這個性質,可以列舉所有串...