求最长回文串
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#define maxn 100005
using namespace std;
char str[maxn], ch[maxn<<1];
int len[maxn<<1];
void Init(){
int j = 0;
scanf("%s", str);
ch[0] = '@';
for(int i = 0; str[i]; i++){
ch[++j] = '#';
ch[++j] = str[i];
}
ch[++j] = '#';
ch[++j] = 0;
}
int Manacher(){
int mex = 0, id, ans = 0;
for(int i = 1; ch[i]; i++){
if(mex > i)
len[i] = min(len[2*id-i], mex-i);
else
len[i] = 1;
while(ch[i+len[i]] == ch[i-len[i]])
len[i]++;
if(i + len[i] > mex){
mex = i + len[i];
id = i;
ans = max(ans, len[i]-1);
}
}
return ans;
}
int main(){
// freopen("in.txt", "r", stdin);
int t;
cin >> t;
while(t--){
Init();
cout << Manacher() << endl;
}
return 0;
}