码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--Manacher算法(最长回文子串)

时间:2018-05-02 23:59:05      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:数据   数组   符号   inf   分享图片   src   技术分享   问题   数据结构   

在字符串中求出其最长回文子串

可能是奇回文也可能是偶回文,要考虑全面

暴力解法:(因为存在奇回文和偶回文的问题,所以不好找,有一个技巧,就是想字符串中每个字符之间添加一个符号(任意符号,也可以是字符串中的符号),然后在每个位置向两端开始扩充)

答案就是最大值/2

技术分享图片

Manacher算法: 字符串中每个字符串之间也要加上一个字符

回文直径:从某个位置开始向两边扩的最大长度

1. 回文半径数组:arr[],以每个位置为中心能扩出来的回文半径的长度

2. 最右回文右边界R:所有回文半径中,最靠右的位置

  开始位置为-1技术分享图片

3. 回文右边界的中心  当前回文右边界到达最右边时,是以哪个位置为中心进行扩充的

算法:

1.当前位置为 i   可能性1:i 不在回文右边界R内,则采用暴力扩充

       可能性2:i 在回文右边界R内,且 i 关于回文右边界中心的对称位置 i’ 的回文中心的半径  全部在L 和 R内部

            此时 i 位置的回文区域的半径和 i‘ 一样

        技术分享图片

 

       可能性3:

       可能性4:

 

数据结构--Manacher算法(最长回文子串)

标签:数据   数组   符号   inf   分享图片   src   技术分享   问题   数据结构   

原文地址:https://www.cnblogs.com/SkyeAngel/p/8983100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!