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;
}
View Code

 

解法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;
}
View Code

 

以上是关于HDOJ3068最长回文的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3068 最长回文(马拉车)

hdu 3068 最长回文(马拉车)

HDU 3068 最长回文

HDU 3068 最长回文(manacher模板题)

HDU 3068 最长回文(Manacher)

HDU 3068 最长回文