int INIT(char *st)
{
int i, len = strlen(st);
tmp[0] = '@';
for (i = 1; i <= 2 * len; i += 2)
{
tmp[i] = '#';
tmp[i + 1] = st[i / 2];
}
tmp[2 * len + 1] = '#';
tmp[2 * len + 2] = '$';
tmp[2 * len + 3] = 0;
return 2 * len + 1;
}
//Manacher算法计算过程
int MANACHER(char *st, int len)
{
int mx = 0, ans = 0, po = 0;
for (int i = 1; i <= len; i++)
{
if (mx > i)
Len[i] = min(mx - i, Len[2 * po - i]);
else
Len[i] = 1;
while (st[i - Len[i]] == st[i + Len[i]])
Len[i]++;
if (Len[i] + i > mx)
{
mx = Len[i] + i;
po = i;
}
ans = max(ans, Len[i]);
}
}