模板 manacher演算法

2022-02-15 21:55:57 字數 757 閱讀 6550

題目描述

給出乙個只由小寫英文本元a,b,c…y,z組成的字串s,求s中最長回文串的長度.

字串長度為n

輸入輸出格式

輸入格式:

一行小寫英文本元a,b,c…y,z組成的字串s

輸出格式:

乙個整數表示答案

輸入輸出樣例

輸入樣例#1:

aaa

輸出樣例#1:

3 說明

字串長度len <= 11000000

//by menteur_hxy

#include

#include

#include

#include

using

namespace

std;

const

int max=11000100;

const

int inf=0x3f3f3f3f;

int len,p[max*3];

char a[max*3]=;

void manacher()

}int main()

// for(int i=0;i<=len;i++) coutint ans=0;

for(int i=0;i<=len;i++)

if(p[i]>ans) ans=p[i];

printf("%d",ans-1);

return

0;}

模板 manacher演算法

回文串長度的奇偶性造成了對稱軸的位置可能在某字元上,也可能在兩個字元之間的空隙處 那麼manacher對此的優化是在每兩個字元中間插入另乙個字元,如 用乙個輔助陣列r表示每個點能夠擴充套件出的回文長度 我們先設定乙個輔助變數maxright,表示已經觸及到的最右邊的字元 另外還要設定乙個輔助變數mi...

回文串 Manacher演算法(模板)

用途 在o n 時間內,求出以每乙個點為中心的回文串長度。首先,有乙個非常巧妙的轉化。由於回文串長度有可能為奇數也有可能為偶數,說明回文中心不一定在乙個字元上。所以要將字串做如下處理 在每兩個字母之間插入乙個特殊字元,通常用 這樣所有的回文串就都變成了以乙個字元為回文中心的。並且,我們需要在字串的開...

題解 P3805 模板 manacher演算法

我們先看兩個字串 abccba abcdcba 顯然這兩字串是回文的 然而兩個串的對稱中心的特性不同,第乙個串,它的對稱中心在兩個c中間,然而第二個串,它的對稱中心就是d。這樣我們如果要記錄回文串的對稱中心,就顯得複雜了。為了解決這個問題,把兩種情況統一起來,我們就在字母之間插入隔板,這樣兩個問題就...