#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
char str[maxn],s[maxn<<1];
int r[maxn<<1];
int l;
int ans=0;
void manacher()
{
s[0]='*';
s[1]='#';
for(int i=0;i<l;i++)
{
s[(i+1)<<1]=str[i];
s[(i+1)<<1|1]='#';
}
l=l*2+2;
int max_r=0,pos=0;
for(int i=0;i<l;i++)
{
if(max_r>i)
r[i]=min(max_r-i,r[2*pos-i]);
else
r[i]=0;
while(i+r[i]+1<l&&i-r[i]-1>=0&&s[i+r[i]+1]==s[i-r[i]-1])
r[i]++;
if(r[i]+i>max_r)
{
max_r=r[i]+i;
pos=i;
}
ans=max(ans,r[i]);
}
}
转载于:https://www.cnblogs.com/loser-qi/p/9676432.html