hihocode ---1032

时间:2023-03-09 02:08:03
hihocode  ---1032
 #include<iostream>
#include<cstring>
#include<cstdio> using namespace std; const int MAXN = + ;
char Ma[MAXN*];
int Mp[MAXN*];
void Manacher(char s[],int len)
{
int l=;
Ma[l++]='$'; Ma[l++]='#';
for(int i=;i<len;i++)
{
Ma[l++]=s[i];
Ma[l++]='#';
}
Ma[l]=;
int mx=,id=;
for(int i=;i<l;i++)
{
Mp[i]=mx>i?min(Mp[*id-i],mx-i):;
while(Ma[i+Mp[i]]==Ma[i-Mp[i]])Mp[i]++;
if(i+Mp[i]>mx)
{
mx=i+Mp[i];
id=i;
}
}
} char s[MAXN];
int main()
{
int t;
cin >> t;
while (t--)
{
memset(s,,sizeof(s)); scanf("%s",s );
{
int len=strlen(s);
Manacher(s,len);
int ans=;
for(int i=;i<*len+;i++)
ans=max(ans,Mp[i]-);
printf("%d\n",ans);
}
} return ;
}

Manacher 最长回文子串

http://hihocoder.com/problemset/problem/1032