关于manacher算法,似乎在学完KMP之后,比较容易上手,虽然有些原理方面,我没有理解的太深。

Manacher就是解决回文串的问题,求一个字符串中的最长回文子串。

Manacher算法首先对字符串进行处理:在所有字符之间插入‘#’,这样的好处是,无论最长回文子串是奇数个或者是偶数个,都可以进行处理。

处理过程是这样的

假设原串是这样的

1 2 3 4 5

a b b a d

处理完成一个新数组

0  1  2  3  4  5  6  7  8  9  10  11  12

? #  a #  b  #  b  #  a  #  d    #   0

1  2  1  2  5  2  1  2  1   2    1

首尾设置完全不相干的字符,是为了检测回文时,不会被算进去。

最下一列叫做P[i] ,用来记录当前位的回文个数,如果前后都不回文,默认p[i]=1,(可以当成自身回文)。

算法核心部分有三部分

还是直接用代码来讲吧:

HD#include <iostream>

#include <cstdio>
#include <cstring>
#define maxn 1100050
char str[maxn];
char a[maxn<<];
int p[maxn<<];
int min(int x,int y)
{
if (x<y) return x;
return y;
}
int main()
{while (scanf("%s",&str[]))
{ if (str[]=='E') break;
int i,j;
a[]='?',a[]='#';
for (i=; str[i]; i++)//处理成新的字符串。
{
a[(i<<)]=str[i];
a[(i<<)+]='#';
}
int n=(i<<);
a[n]=;
int maxid=,maxl=,id=;
for (i=; i<n; i++)//代码的核心部分。
{
if (maxid>i)//如果之前记录的最大回文覆盖超过了当前点坐标,进行比较(这一步其实我也不是很理解,只知道可以节省搜索,优化时间)
p[i]=min(p[*id-i],maxid-i); //进行覆盖度的比较,取较小的为p[i]
else
p[i]=; //否则直接定义为默认值1。
while (a[i+p[i]]==a[i-p[i]]) p[i]++; //前后搜索,若回文,则+1;
ifmaxid)//获取当前最大覆盖面,和覆盖点。
{
maxid=p[i]+i;
id=i;
}
if (p[i]>maxl) maxl=p[i]; //最大回文长度保存在p[i]中,取p[i]最大值即可。(此时最长回文串的中间点即为i点(不过是加了‘#’的新串))
}
printf("%d\n",maxl-);
}
return ;
}

Hdu_3068 Manacger算法的心得的更多相关文章

  1. 高频交易算法研发心得--RSI指标及应用

    高频交易算法研发心得--RSI指标及应用 前面文章中我们提到了MA均线(包括EMA,SMA).MACD以及SAR指标,这三类指标存在一个共同特点,即:从固定周期的价格作为判读的指导思想,并将价格进行平 ...

  2. 高频交易算法研发心得--WAVT指标(Warensoft交易量趋势指标)算法及应用

    高频交易算法研发心得--WAVT指标(Warensoft交易量趋势指标)算法及应用 注:WAVT指标由Warensoft(王宇)原创. 前面聊了一系列的常见应用指标,包括短线.长线的指标,并且也无耐的 ...

  3. 高频交易算法研发心得--MACD指标算法及应用

    凤鸾宝帐景非常,尽是泥金巧样妆. 曲曲远山飞翠色:翩翩舞袖映霞裳. 梨花带雨争娇艳:芍药笼烟骋媚妆. 但得妖娆能举动,取回长乐侍君王. [摘自<封神演义>纣王在女娲宫上香时题的诗] 一首定 ...

  4. AI大厂算法测试心得:人脸识别关键指标有哪些?

    仅仅在几年前,程序员要开发一款人脸识别应用,就必须精通算法的编写.但现在,随着成熟算法的对外开放,越来越多开发者只需专注于开发垂直行业的产品即可. 由调查机构发布的<中国AI产业地图研究> ...

  5. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  6. ACM失败之路

    校赛打完,已过四月,该是准备背起行囊,踏上考研之路了,自然,得先阔别一下ACM了,想起这几年ACM路,感慨颇多,不得不一诉心肠,与大家分享一下我的ACM历程,如果有人能从此文获取一些益处,那我就很欣慰 ...

  7. BM和KMP字符串匹配算法学习

    BM和KMP字符串匹配算法学习 分类: 研究与学习 字符串匹配BM(Boyer-Moore)算法学习心得 http://www.cnblogs.com/a180285/archive/2011/12/ ...

  8. 电梯V2.0

    电梯V2.0 GitHub仓库地址 Problem 一栋10层的大楼(楼层编号1-10),设3台无限载重的电梯,初始时电梯停在1层.其中:1号电梯只能停留在奇数层,2号电梯可以各层都停留,3号电梯只停 ...

  9. KMP算法心得

    今天又看了一遍KMP,感觉真的懂了...就来这儿发一下心得吧. KMP算法其实就是暴力的改进版.让我们看看暴力的匹配. Original string: ababababcbbababababc Pa ...

随机推荐

  1. 吴裕雄--天生自然java开发常用类库学习笔记:大数操作

    import java.math.* ; class MyMath{ public static double add(double d1,double d2){ // 进行加法计算 BigDecim ...

  2. 《ES6标准入门》(阮一峰)--6.正则的扩展

    1.RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new Re ...

  3. [强网杯 2019]Upload

    0x00 知识点 代码审计,PHP 反序列化. 0x01 解题 先注册一个账号,再登陆 上传 简单测试一下: 只能上传能被正常查看的 png. F12看到文件上传路径 扫扫敏感文件 存在:/www.t ...

  4. [BJDCTF2020]Cookie is so stable

    0x00 知识点 Twig模板注入 链接: https://www.k0rz3n.com/2018/11/12/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A ...

  5. 【剑指Offer】面试题26. 树的子结构

    题目 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A:      3     / \ ...

  6. Xshell远程连接kali,SSH服务拒绝了密码

    在kali里面/etc/ssh/目录下,修改sshd_config文件,不是ssh_config,ssh_config是针对客户端的配置文件,而sshd_config是针对服务器端的配置文件. 找到# ...

  7. 51nod 1293:球与切换器

    1293 球与切换器 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  取消关注 有N行M列的正方形盒子.每个盒子有三种状态0 ...

  8. Node.js 加载静态资源css,js等不显示问题的解决方法

    一,原因 1,没有响应到css等文件 2,响应类型是由文件的后缀名决定 (1)html的请求头 Content-Type : text/html ; charset=utf-8 (2) CSS的请求头 ...

  9. jrebel插件的激活

    转 jrebel idea插件激活,亲测可用: 在jrebel server处,写上: http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc81 ...

  10. scala安装教程及简单配置

    本文将介绍以下内容:Windows下安装scala运行环境,安装编译工具并简单配置,实现著名的“Hello,World". 一,Windows下安装scala运行环境 1.配置jdk,因为s ...