• 最长回文(hdu 3068)


    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

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 220010
    using namespace std;
    char s,s1[M],s2[M];
    int n,p[M];
    void manacher()
    {
        int id=0,mx=0,ans=0;
        for(int i=2;i<=2*n;i++)
        {
            if(mx>i)p[i]=min(p[2*id-i],mx-i);
            else p[i]=1;
            while(s2[i+p[i]]==s2[i-p[i]])++p[i];
            if(i+p[i]>mx)
            {
                id=i;
                mx=i+p[i];
            }
            ans=max(ans,p[i]-1);
        }
        printf("%d
    ",ans);
    }
    void init()
    {
        n=strlen(s1);
        s2[0]='$';
        for(int i=0;i<=n;i++)
          s2[2*i+1]='#',s2[2*i+2]=s1[i];
        manacher();
    }
    int main()
    {
        while(scanf("%s",s1)!=EOF)
        {
            memset(p,0,sizeof(p));
            memset(s2,0,sizeof(s2));
            init();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    查看占用内存cpu top10
    free 详解
    find
    服务器硬件查看
    firewalld命令使用
    firewalld-zone概念介绍
    Jenkins rpm包安装
    攻击防御案例
    filebeat收集系统登陆日志
    nginx转换json格式
  • 原文地址:https://www.cnblogs.com/harden/p/5751138.html
Copyright © 2020-2023  润新知