Manacher Algorithm 马拉车算法

Manacher Algorithm 马拉车算法


在介绍算法前,先了解一下最长回文子串
  在计算机科学中,最长回文子串或最长对称因子问题是在一个字符串中查找一个最长连续子串,这个子串必须是回文。例如:
  (1) s = “banana” 最长回文子串是“anana”。中间的a为中心,左右对称(或者说镜像)。
  (2) s = “abracadabra” 最长回文子串是“ada”和“aca”,长度均为3。
  所以最长回文子串并不能保证是唯一的。在一些应用中需要返回全部的最长回文子串(所有子串都是回文,并且不能扩展为更大的回文子串)而不是返回其中之一或是最大的回文子串的长度。
  [Manacher(1975)] 发现了一种线性时间算法 O(n) O ( n ) ,可以在列出给定字符串中从字符串头部开始的所有回文。要在线性时间内找出字符串的最长回文子串,这个算法必须利用回文和子回文的这些特点和观察回文的左边是右边的镜像


算法流程分析

  由于回文分为偶回文(比如 abab 长度为4)和奇回文(比如 abcba 长度为5),而在处理奇偶问题比较麻烦,所以这里需要做个预处理,在字符间插入一个特殊字符(这个字符不能在串里出现),将原串转换统一成奇串。
  比如原字符串: s =”abbaTNTabcba”
  插入字符之后:sN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值