• 最长回文 分类: 串 2015-08-03 10:20 5人阅读 评论(0) 收藏


    最长回文
    Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 11085 Accepted Submission(s): 3946

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

    Input
    输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S
    两组case之间由空行隔开(该空行不用处理)
    字符串长度len <= 110000

    Output
    每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.

    Sample Input

    aaaa

    abab

    Sample Output

    4
    3
    今天学习了一个关于O(n)的时间发杂度求最大回文串的;
    思路很简单

    #include <map>
    #include <list>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <string>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #define eps 1e-9
    #define PI acos(-1.0)
    #define INF 0x3f3f3f3f
    #define CRR fclose(stdin)
    #define CWW fclose(stdout)
    #define WW freopen("output.txt","w",stdout)
    #define RR freopen("input.txt","r",stdin)
    
    using namespace std;
    
    const int MAX=220010;
    
    char s[MAX];
    char str[MAX];
    int p[MAX];
    int len;
    void Change()
    {
        len=1;
        str[0]='$';
        for(int i=0;s[i]!='';i++)
        {
            str[len++]='#';
            str[len++]=s[i];
        }
        str[len++]='#';
        str[len]='';
    }
    void Get_P()
    {
        int id=0;
        Change();
        memset(p,0,sizeof(p));
        for(int i=1;i<len;i++)
        {
            p[i]=id+p[id]>i?min(p[id]+id-i,p[2*id-i]):1;
            while(str[i+p[i]]==str[i-p[i]])
                p[i]++;
            if(p[i]+i>p[id]+id)
            {
                id=i;
            }
        }
    }
    int main()
    {
        while(~scanf("%s",s))
        {
            Get_P();
            int ans=1;
            for(int i=1;i<len;i++)
            {
                ans=max(ans,p[i]);
            }
            printf("%d
    ",ans-1);
        }
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Arduino-原理图标识
    python-垃圾回收机制
    利用浮力测密度
    sys模块-与python解释器交互的模块
    第十一章第二节 功率
    第十一章第一节 功
    类-描述器-把类对象方法转变为属性方式
    H5浏览器播放RTMP直播流
    如何查看某个端口被谁占用
    OBS第三方推流直播教程
  • 原文地址:https://www.cnblogs.com/juechen/p/4721937.html
Copyright © 2020-2023  润新知