这个算法,,,好像比想象中简单一点?
模板:
//cin读入记得加优化
int Manacher(string s)
{
string t("@#");
for(int i=0;i<s.size();i++)
t+=s[i],t+="#";
vector<int> p(t.size(),0);
int ans=0,mx=0,id=0;
for(int i=1;i<t.size();i++)
{
p[i]=mx>i?min(p[2*id-i],mx-i):1;
while(t[i+p[i]]==t[i-p[i]])
p[i]++;
if(i+p[i]>mx)
mx=i+p[i],id=i;
if(ans<p[i]-1)
ans=p[i]-1;
}
return ans;
}