![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
马拉车(Manacher)算法
Dream-chasing ant
鄙人水平不高,建立博客初心只是想留一份回忆给自己。
展开
-
Palindrome POJ - 3974
马拉车算法的模板题,操练起来吧。几天前还觉得马拉车算法很难,现在已经稍微懂点了 传送门 #include<cstdio> #include<iostream> #include<cstring> #include<cmath> using namespace std; const int maxn=1e6+10; char str[maxn]; char p[maxn<<1]; int l[maxn<<1]; void malach.原创 2020-07-25 21:25:57 · 68 阅读 · 0 评论 -
马拉车(Manacher)算法
文章目录前言思路代码 前言 马拉车算法在O(n)的情况下求解一个字符串的最长回文子串的长度 思路 首先,我们问了解决问题方便,不用讨论奇偶,在首尾处和原字符串每个相邻两个字符中间插入一个分隔符。 设置一个辅助数组p[i],表示以字符s[i]为中心的最长回文字串的最右字符到s[i]的长度。比如以s[i]为中心的最长回文子串是s[l,r],那么p[i]=r-l+1. 关于p数组的求法: 首先从左到右依次计算len[i],当计算len[i]时,len[j] (0<j<i)已经被计算过了。原创 2020-07-25 21:22:59 · 191 阅读 · 1 评论