HDU

来源:互联网 发布:sql setup.exe打不开 编辑:程序博客网 时间:2024/06/02 05:37

题意

给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等

思路

马拉车模板题

链接

https://cn.vjudge.net/contest/177933#problem/H

代码

#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn = 3e5;char str0[maxn], str1[maxn];int p[maxn];int pro(){    int len = 0;    str1[len++] = '$';    for(int i = 0; str0[i] != '\0'; i++)    {        str1[len++] = '#';        str1[len++] = str0[i];    }    str1[len++] = '#';    str1[len] = '\0';    return len;}void manacher(int len){    int mx = 0, id = 0;    for(int i = 0; i < len; i++)    {        if(i <= mx) p[i] = min(p[2 * id - i], mx - i);        else p[i] = 1;        while(str1[i + p[i]] == str1[i - p[i]]) p[i]++;        if(mx < i + p[i])        {            mx = i + p[i];            id = i;        }    }}int main(){//  freopen("in.txt", "r", stdin);    while(scanf(" %s", str0) != EOF)    {        memset(p, 0, sizeof p);        int len = pro();        manacher(len);        int res = 0;        for(int i = 0; i < len; i++)        {            res = max(res, p[i]-1);        }        cout << res << endl;    }}
原创粉丝点击