给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
回文就是正反读都是一样的字符串,如aba, abba等
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
aaaa abab
4 3
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
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 mx=0,id=0,resLen=0,resCenter=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(mx<i+p[i]){
mx=i+p[i];
id=i;
}
if(resLen<p[i]){
resLen=p[i];
resCenter=i;
}
}
string str=s.substr((resCenter-resLen)/2,resLen-1);
return str.length();
}
int main(){
string str;
while(cin>>str){
printf("%d\n",Manacher(str));
}
return 0;
}