HDU-3068 最长回文(manacher算法)

来源:互联网 发布:多核编程的艺术 编辑:程序博客网 时间:2024/06/08 00:47

题意:给一个字符串s,求最长回文串的长度。

思路:manacher算法模板题,点击入门。


Code(板子):

#include <algorithm>#include <string.h>#include <cstdio>using namespace std;const int maxn = 110005;char s[maxn*2];int p[maxn*2];int manacher(){memset(p, 0, sizeof p);int id, maxlen, len = strlen(s);for(int i = len; i >= 0; --i){s[i*2+2] = s[i];s[i*2+1] = '#';}s[0] = '$';id = 0, maxlen = 1;for(int i = 1; i <= 2*len+1; ++i){if(id+p[id] > i) p[i] = min(p[id-(i-id)], id+p[id]-i);else p[i] = 1;while(s[i-p[i]] == s[i+p[i]]) ++p[i];if(id+p[id] < i+p[i]) id = i;if(maxlen < p[i]) maxlen = p[id];}return maxlen-1;}int main(){while(~scanf("%s", s)) printf("%d\n", manacher());return 0;}


继续加油~

原创粉丝点击