回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
输入
输入Str(Str的长度 <= 100000)
输出
输出最长回文子串的长度L。
输入样例
daabaac
输出样例
5
代码:
#include <iostream> #include <cstdio> #include <cstring> #define MAX 100000 #define DMAX 10000 using namespace std; typedef long long ll; char s[MAX + 1]; char t[MAX * 2 + 5] = {'@','#'}; int p[MAX * 2 + 5]; int Manacher(char *str) { int len = strlen(str); for(int i = 1;i <= len;i ++) { t[i * 2] = str[i - 1]; t[i * 2 + 1] = '#'; } t[len * 2 + 2] = 0; int mi = 0,rpoint = 0,mr = 0; for(int i = 1;t[i];i ++) { p[i] = i < rpoint ? min(rpoint - i,p[mi * 2 - i]) : 1; while(t[i + p[i]] == t[i - p[i]]) p[i] ++; if(i + p[i] > rpoint) { mi = i; rpoint = i + p[i]; } if(mr < p[i]) mr = p[i]; } return mr - 1; } int main() { scanf("%s",s); printf("%d",Manacher(s)); }