zoukankan      html  css  js  c++  java
  • 最长回文(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
  • 相关阅读:
    laravel 服务提供者
    乐观锁和悲观锁
    MySQL索引原理及慢查询优化
    Laravel Session保存机制和terminate中间件
    laravel session踩坑
    理解 JavaScript 的 async/await(转)
    知识点
    js异步
    Office使用笔记
    YUM常用命令
  • 原文地址:https://www.cnblogs.com/harden/p/5751138.html
Copyright © 2011-2022 走看看