zoukankan      html  css  js  c++  java
  • 最长回文 分类: 串 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);
        }
    }
    

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

  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/juechen/p/4721937.html
Copyright © 2011-2022 走看看