51nod 1089 馬拉車演算法

2021-08-21 15:58:41 字數 971 閱讀 5101

回文串是指aba、abba、cccbccc、aaaa這種左右對稱的字串。

輸入乙個字串str,輸出str裡最長回文子串的長度。

input

輸入str(str的長度 <= 100000)
output

輸出最長回文子串的長度l。
input示例

daabaac
output示例

5
相關問題

約束性較大基本上用於求最大回文串字元  n(o)複雜度。

字串分為奇偶串,但預處理一下可以全部變為奇串。在每兩各自符之間加乙個特殊符號,最前面需要加字元因為有越界情況。

(2×id-i)時可能越界。

#include#include#include#includeconst int maxn =1000010;

using namespace std;

char new_l[maxn<<1];

char old_l[maxn];

int p[maxn<<1];

int manacher()

{ int i,id=0,mx=0;//mx表示以id為中心的回文串的右邊長度

int max_len=0;

for(i=1;new_l[i];i++)

{ if(mx>i) p[i]=min(p[2*id-i],mx-i);//因為回文串的長度如果小於最大回文串的,(2*id-i)表示與i關於id對稱的字串的長度,而此時的長度最少等於d[2*id-i];

else p[i]=1;

while(new_l[i-p[i]]==new_l[i+p[i]]) p[i]++;

if(mx>old_l;

int j=2;

int len=strlen(old_l);

new_l[0]='$';

new_l[1]='#';

for(int i=0;i這個大佬部落格有詳細

51nod1089最長回文子串V2

1089 最長回文子串 v2 manacher演算法 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000...

馬拉車演算法

思路筆記 上述情況1和情況2又可以歸結為 i 的回文半徑 和 r i的距離 中小的那個就是i的回文半徑。include include includeusing namespace std string manacherstring string str return res int min int...

馬拉車演算法

馬拉車演算法是一種計算最長回文子串的演算法,以其優秀的線性複雜度聞名於世,相較於o n 2 o n 2 o n2 的dpdp dp演算法和會被特殊資料卡到o n 2 o n 2 o n2 的暴力演算法,馬拉車演算法無疑是求解最長回文子串的最優選擇。最長回文子串分為偶數串和奇數串,為了避免這些問題,馬...