求字符串st(仅包含’a’~’z’)最长回文字串直径
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fo(i,x,y) for(int i=x;i<=y;i++)
using namespace std;
const int maxn=10000;
char st[maxn];
int n,f[maxn],a[maxn];
void scan()
{
char ch=getchar();
st[n=1]='#';
while(ch>='a' && ch<='z') st[++n]=ch,st[++n]='#',ch=getchar();
}
int main()
{
scan();
int mid=0;
fo(i,1,n)
{
if(mid+f[mid]>=i) f[i]=min(mid+f[mid]-i,f[mid-(i-mid)]);
while(st[i+f[i]+1] && st[i+f[i]+1]==st[i-f[i]-1]) f[i]++;
if(i+f[i]>mid+f[mid]) mid=i;
}
int max=0;
fo(i,1,n)
if(f[i]>max) max=f[i];
printf("%d",max);
}