最长回文串
思路
回文串模板题
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<string>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
const int MAXN=110000+5;
int len[MAXN<<1];
int Manacher(string s){
string t;
t="$#";
for(int i=0;i<s.size();i++){
t+=s[i];
t+='#';
}
int mx=0,id=0,rlen=0,rid=0;
for(int i=1;i<t.size();i++){
len[i]= mx>i? min(len[2*id-i],mx-i):1;
while(t[i-len[i]]==t[i+len[i]]) len[i]++;
if(mx<i+len[i]){
mx=i+len[i];
id=i;
}
if(rlen<len[i]){
rlen=len[i];
rid=i;
}
}
//return s.substr((rid-rlen)/2,rlen-1);
return rlen-1;
}
int main(){
std::ios::sync_with_stdio(false);
string s;
while(cin>>s){
cout<<Manacher(s)<<endl;
}
return 0;
}