HDU-3068-最长回文 (Manacher算法)[通俗易懂]

HDU-3068-最长回文 (Manacher算法)

大家好,又见面了,我是全栈君。

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

思路:这里讲得非常具体了http://blog.csdn.net/ggggiqnypgjg/article/details/6645824

#include <cstdio>
using namespace std;

char s[110005],str[220010];
int p[220010];

int main()
{
    int len,i,maxlen,maxindex,ans;

    while(~scanf("%s",s))
    {
        str[0]='$';
        str[1]='#';

        for(i=0;s[i];i++)
        {
            str[i*2+2]=s[i];
            str[i*2+3]='#';
        }

        len=i*2+2;
        str[len]='\0';

        maxlen=0;
        for(i=1;i<len;i++)
        {
            if(maxlen>i) p[i]=p[2*maxindex-i]<maxlen-i?p[2*maxindex-i]:maxlen-i;
            else p[i]=1;

            while(str[i-p[i]]==str[i+p[i]])
            {
                p[i]++;
            }

            if(p[i]+i>maxlen)
            {
                maxlen=p[i]+i;
                maxindex=i;
            }
        }

        ans=0;
            
        for(i=1;i<len;i++) if(ans<p[i]) ans=p[i];

        printf("%d\n",ans-1);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116281.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 玩转pycharm_pycharm首次使用教程

    玩转pycharm_pycharm首次使用教程点击“简说Python”,选择“星标公众号”福利干货,第一时间送达!本文授权转载自Python编程时光,禁二次转载作者:Python编程时光阅读文本大概需要6分钟。大…

    2022年8月26日
  • 树莓派是什么?能干什么?

    树莓派是什么?能干什么?树莓派是什么?能干什么?一、什么是树莓派?二、树莓派和单片机的区别?三、树莓派使用的什么系统?四、树莓派的最基本操作方法?五、树莓派能干什么?六、玩树莓派能学到什么?一、什么是树莓派?树莓派是由树莓派基金会发布的卡片式电脑,起初的目的是为了让更多的孩子们可以学习计算机编程,但是发布以后受到了广大计算机爱好者的喜爱树莓派被称为卡片式电脑,顾名思义它可以安装操作系统,并且接上显示屏鼠标键盘就可以正常使用,在上面可以用python或者C语言编程并运行。二、树莓派和单片机的区别?树莓派是卡片式电脑可以装

    2022年6月8日
  • Linux配置静态IP地址「建议收藏」

    Linux配置静态IP地址「建议收藏」Linux配置静态IP地址

    2022年4月22日
  • 如何更改WIFI频段_wifi5g与2.4g怎么切换

    如何更改WIFI频段_wifi5g与2.4g怎么切换首先打开浏览器并输入IP地址进入路由器管理页面,此时需要输入用户名以及密码进行登录,登录成功以后点击左侧的“无线设置”选项,然后点击“高级无线设置”选项,之后我们就可以修改WiFi的频段了。需要注意的是,目前仅能将无线频段修改为2.4GHz或者5GHz两个频段。如果您的iPhone手机突然不能连接WiFi了,那么您可以打开手机“设置”应用,然后点击“通用”选项,接着点击“还原”选项,进入后选择点击…

    2022年10月20日
  • javah的使用[通俗易懂]

    javah的使用[通俗易懂]原文链接:http://blog.csdn.net/zgyulongfei/article/details/74371761.无包名的类例如D:\MyTest目录下有一个Test.class文件。那么要生成.h文件,则在控制台下切换到D:\MyTest目录下,然后输入javah-jni Test之后即可在D:\MyTest下找到Test.h头文件

    2022年9月25日
  • 计算机网络——子网划分(内含习题讲解)

    计算机网络——子网划分(内含习题讲解)PS:(习题是由b站–计算机网络-谢希仁第7版-河南科技大学视频中获得)前情提要:我们在这之前已经学过了两级的IP地址:但是两级的IP地址有很多弊端,所以我们将要学习三级IP地址,也就是两级IP地址的升级版那我们要注意什么呢?一:我怎么去知道人家用的是两级IP还是三级IP呢?答:利用子网掩码;二:那什么是子网掩码呢?…

    2022年4月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号