题目链接
给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.
板子:

#include <bits/stdc++.h>
using namespace std;
const int N=111000000+10;
#define end '\n'
#define IOS ios::sync_with_stdio(0)
int n,hw[N],ans;
char a[N],s[N*2];//因为要插入字符所以*2,空间限制也很安全
void fun() {
    s[0] = s[1] = '#';
    for (int i = 0; i < n; i++) {
        s[i * 2 + 2] = a[i];
        s[i * 2 + 3] = '#';
    }
    n = n * 2 + 2;
    s[n] = 0;
}
void manacher() {
    int max_r = 0, mid;
    for (int i = 1; i < n; i++) {
        if (i < max_r) {
            hw[i] = min(hw[2 * mid - i], hw[mid] + mid - i);//划重点
        } else {
            hw[i] = 1;
        }
        for (; s[i + hw[i]] == s[i - hw[i]]; hw[i]++); //继续扩展
        if (hw[i] + i > max_r) {
            max_r = hw[i] + i;//更新
            mid = i;
        }
    }
}
int main() {
    scanf("%s", a);
    n = strlen(a);
    fun();
    manacher();
    ans = 1;
    for (int i = 0; i < n; i++) {
        ans = max(ans, hw[i]);
    }
    printf("%d\n", ans - 1);
    return 0;
}