int manacher(char str[]) {
temp[0] = '$';
temp[1] = '#';
for (int i = 1; i <= n; i++) {
temp[i * 2] = str[i - 1];
temp[i * 2 + 1] = '#';
}
temp[2 * n + 2] = '\0';
int mx = 0;
int maxlen = -1;
int mid = 0;
for (int i = 0; temp[i]; i++) {
if (i < mx)
len[i] = min(len[2 * mid - i], mx - i);
else len[i] = 1;
while (temp[i - len[i]] == temp[i + len[i]]) len[i]++;
if (len[i] + i > mx) {
mx = len[i] + i;
mid = i;
}
maxlen = max(maxlen, len[i] - 1);
if (len[i] - 1 >= m && (len[i] - 1 - m) % 2 == 0) {
flag = true;
}
}
return maxlen;
}
最长回文串算法
最新推荐文章于 2024-05-20 20:08:58 发布