HDOJ3068最长回文
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDOJ3068最长回文相关的知识,希望对你有一定的参考价值。
解法1、manacher算法
#include <cstdio> #include <cstring> #include <string> using namespace std; char str[1000002 + 1200]; int fast(char *p) { int ans = 1; for (int i = 1; p[i]; ++i) { int s = i, e = i, t; while (p[e + 1] == p[i]) ++e; i = e; while (p[s - 1] == p[e + 1]) --s, ++e; if ((t = e - s + 1) > ans) ans = t; } return ans; } int main() { str[0]=\'$\'; while(scanf("%s", str+1) !=EOF) { printf("%d\\n", fast(str)); } return 0; }
解法2、后缀树
#include <cstdio> #include <cstring> #include <string> using namespace std; char str[1000002 + 1200]; int fast(char *p) { int ans = 1; for (int i = 1; p[i]; ++i) { int s = i, e = i, t; while (p[e + 1] == p[i]) ++e; i = e; while (p[s - 1] == p[e + 1]) --s, ++e; if ((t = e - s + 1) > ans) ans = t; } return ans; } int main() { str[0]=\'$\'; while(scanf("%s", str+1) !=EOF) { printf("%d\\n", fast(str)); } return 0; }
以上是关于HDOJ3068最长回文的主要内容,如果未能解决你的问题,请参考以下文章