Manacher最长回文字串

这个方法是从中心扩展法演化来的,中心扩展的时间复杂度是O(n^2),以每个字符为中心,需要遍历一次,然后查找回文需要再嵌套一层,所以复杂度是O(2n*(n-1)) = O(n^2)。

具体的算法可以参考下面这个 Manacher算法的详细讲解

但是一直没搞明白为啥Manacher的复杂度是O(n),觉得他还是要做两次遍历。今天深究了一下,简单理解,主要看他那个右边界R,每次更新的时候,R都会往右走或者不变,不会回退。所以所有的过程就是R从最左走到最右的过程,复杂度是O(n)。按照上述参考文章中说的情况,第二种的1,2是不需要计算的,复杂度O(1),而剩下来的两种需要去找回文,这两种都会更新R。

当然也可能有人会想,万一很多字符都需要找回文呢,回文又比较长呢,那不还是O(n^2)。之前我纠结的也是这个,后来想起小学的奥数题,两辆车,后车追前车,有辆摩托车在他们之间来回跑,问辆车相遇的时候摩托走了多少路。这个题不需要去算每次的路程相加,只要相遇时间乘以速度就行了。就像不要去纠结几个字符,每个字符的回文长度,只要看R就好了。

不知道几年之后自己看这个还能看懂么。。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容