



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、求回文子串 0(n) manacher 算法回文串定义:"回文串”是一个正读和反读都一样的字符串,比如"level ”或者"noon ”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。经常有一些题目围绕回文子串进行讨论,比如HDOJ_3068_最长回文,求最长回文子串的长度。朴素算法是依次以每一个字符为中心向两侧进行扩展,显然这个复杂度是 O(N2)的,关于字符串的题目常用的算法有KMP、后缀数组、AC自动机,这道题目利用扩展 KMP可以解答,其时间复杂度也很快O(N*logN)。但是,今天笔者介绍一个专门针对回文子串的算法,其时间复杂度为O(n
2、),这就是manacher算法。大家都知道,求回文串时需要判断其奇偶性,也就是求aba和abba的算法略有差距。然而,这个算法做了一个简单的处理,很巧妙地把奇数长度回文串与偶数长度回文串统一考虑,也就是在每个相邻的字符之间插入一个分隔符,串的首尾也要加,当然这个分隔符不能再原串中出现,一般可以用# '或者$'等字符。例如:原串:abaab新串:#a#b#a#a#b#这样一来,原来的奇数长度回文串还是奇数长度,偶数长度的也变成以# '为中心的奇数回文串了。接下来就是算法的中心思想,用一个辅助数组P记录以每个字符为中心的最长回文半径,也就是Pi记录以Stri字符为中心的最长
3、回文串半径。Pi最小为1,此时回文串为Stri 本身。新串: #a#b#a#a#b#P:12141252121我们可以证明Pi-1就是以Stri为中心的回文串在原串当中的长度。证明:1、显然L=2*Pi-1 即为新串中以Stri为中心最长回文串长度。2、 以Stri为中心的回文串一定是以 #开头和结尾的,例如“ #b#b# ”或“#b#a#b# ” 所以L减去最前或者最后的 # '字符就是原串中长度的二倍,即原串长度为 (L-1)/2,化简 的Pi-1。得证。依次从前往后求得P数组就可以了,这里用到了DP(动态规划)的思想,也就是求Pi的时候,前面的P值已经得到了,我们利用回文串的特殊
4、性质可以进行一个大大的优化。我先把核心代码贴上:for (i= 1 ;i<n ;i+)if (MaxId>i)pi=Mi n(p2*id-i,MaxId-i);elsepi=1 ;while (ai+pi=:=ai-pi)pi+;if (pi+i>MaxId)Maxld=pi+i;id=i;retur na<b?a:b;殊字符,令P0= $ '最后位置默认为 0 '不需要特殊处理。此外,我们用Maxld变量记录在求i之前的回文串中,延伸至最右端的位置,同时用 id记录取这个 Maxld的id值。通过下面这句话,算法避免了很多没必要的重复匹配。if (Ma
5、xld>i)pi=Mi n(p2*id-i,Maxld-i);那么这句话是怎么得来的呢,其实就是利用了回文串的对称性,如下图,idi Maxldretur na<b?a:b;retur na<b?a:b;j=2*id-i即为i关于id的对称点,根据对称性,Pj的回文串也是可以对称到i这边的,但是如果Pj的回文串对称过来以后超过Maxld的话,超出部分就不能对称过来了,如下图,所以这里Pi为的下限为两者中的较小者,pi=Min(p2*id-i,Maxld-i)。i Maxld算法的有效比较次数为Maxld次,所以说这个算法的时间复杂度为0(n)。附HDOJ 3068 最长回文
6、代码:#i nclude <stdio.h>#defi ne M 110010char bM,aM<<1;intintpM<< 1 ;Min( int a, intb)1intmai n()int i,n ,id,MaxL,Maxld; while (scanf( "%s" ,&b1)!=EOF)MaxL=MaxId=0;for (i= 1 ;bi!='0'i+)a(i<<1 )=bi;a(i<<1)+ 1 = '#'a0='?'a 1= '#'n=(i<<1)+ 2;a n=0;Maxld=MaxL= 0;for (i= 1 ;i<n;i+)if (MaxId>i) Ipi=Mi n(p2*id-i,Maxld-i);elsepi=1 ;while (ai+pi=ai-pi)pi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部编版二年级语文上册教学评价计划
- 部编版三年级上册语文暑期学习计划
- 网校新学期在线课程计划
- 风电场架空输电线路施工缺陷及应对措施
- 2025年秋季幼儿园教务处活动计划
- 水力学课件制作
- 食品安全标准宣贯
- 2025年幼儿园中班下学期文化艺术计划
- 港口工程施工质量风险识别与控制措施
- XX小学2025-德育课程改革工作计划
- 《公共政策学(第二版)》 课件 第3章 政策模型;第4章 政策议程
- Lesson 10 Rain and Sun(教学设计)-2023-2024学年冀教版(三起)英语四年级下册
- 智联招聘国企笔试题库
- 《妇幼保健学》课件-第三章 儿童期保健
- GB/T 15597.2-2024塑料聚甲基丙烯酸甲酯(PMMA)模塑和挤出材料第2部分:试样制备和性能测定
- 2023年南充市委组织部南充市遴选(考调)公务员考试真题
- 婚内忠诚协议书范本电子版
- 2024年安徽省初中(八年级)学业水平考试初二会考生物试卷真题
- 2024年重庆市重庆市选调生考试(公共基础知识)综合能力题库含答案
- 国开2024《人文英语4》边学边练参考答案
- 质量手册(质量保证手册,压力容器)
评论
0/150
提交评论