题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344
题目大意:求给定回文串的最长回文串的长度
分析:马拉车模板题
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 1e4 + 5;
int len, p[N];
string s, str;
void init() {
len = s.length();
str = "";
str += "$";
for(int i = 0; i < len; i++) {
str += "#";
str += s[i];
}
str += "#";
len = str.length();
}
int manacher() {
int sum = 0, mx = 0, id;
for(int i = 1; i < len; i++) {
p[i] = mx > i ? min(mx - i, p[2 * id - i]) : 1;
while(str[i - p[i]] == str[i + p[i]]) p[i]++;
if(p[i] + i > mx) {
mx = p[i] + i;
id = i;
}
sum = max(sum, p[i] - 1);
}
return sum;
}
int main() {
getline(cin, s);
init();
printf("%d\n", manacher());
return 0;
}