#include <cstring>
#define Max 2505
char s[Max] ;
char str[Max] ;
int rad[Max] ;
int manacher () {
int len = strlen(s) ;
int max = 0;
str[0] = '$';
str[1] = '#';
int i = 0 ;
for (; i < len; i++) {
str[i * 2 + 2] = s[i];
str[i * 2 + 3] = '#';
}
str[2 * len + 2] = 0;
for (int i = 1; i < 2 * len + 2 ; i++) {
rad[i] = 0;
}
int id = 0;
for (i = 1; i < 2 * len + 2; i++) {
if (max > i)
rad[i] = min(rad[2 * id - i], rad[id] + id - i) ;
else
rad[i] = 1 ;
while (str[i + rad[i]] == str[i - rad[i]])
rad[i] ++ ;
if (rad[i] + i > max) {
max = rad[i] + i;
id = i;
}
}
int mx = 0;
for (i = 1; i < 2 * len + 2 ; i++) {
if (mx < rad[i] - 1)
mx = rad[i] - 1;
}
return mx;
}
别人的代码,目前测试过了一道简单题
转自:http://blog.youkuaiyun.com/acm_baihuzi/article/details/41704583