Manacher
参考资料
实现
int p[N<<1];
int manacher(string s)
{
int n=s.size();
string t="@#";
for(int i=0;i<n;i++)
{
t+=s[i];
t+='#';
}
t+='&';
s=t;
n=n<<1|1;
for(int i=1,l=0,r=0;i<=n;i++)
{
p[i]=i<=r?min(p[2*l-i],r-i+1):1;
while(s[i-p[i]]==s[i+p[i]])p[i]++;
if(i+p[i]-1>r)r=i+p[i]-1,l=i;
}
return n;
}
例题
给出一个只由小写英文字符组成的字符串 ,求 中最长回文串的长度。
给定长度为 的字符串 ,求 的最长双回文子串 ,即可将 分为两部分 ()且 和 都是回文串。