Manacher学习笔记
Manacher
Tags:字符串
作业部落
评论地址
极易理解,挂一个dalao的博客
贴个代码吧。
//luogu P3805【模板】manacher算法
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int l,C,R,p[31000000],Ans;
char s[31000000];
int main()
{
s[++l]='#';char ch=getchar();
while(ch>'z'||ch<'a') ch=getchar();
while(ch>='a'&&ch<='z')
{
s[++l]=ch;s[++l]='#';
ch=getchar();
}
for(int i=1;i<=l;i++)
{
p[i]=i<R?min(p[C*2-i],R-i):1;
while(s[i+p[i]]==s[i-p[i]]&&i-p[i]>=1&&i+p[i]<=l) p[i]++;
if(i+p[i]>R) {R=i+p[i];C=i;}
Ans=max(Ans,p[i]-1);
}
printf("%d\n",Ans); return 0;
}
挂个题单