前言: 本文参考《信息学奥赛一本通·金牌导航》。 正文: Manacher 算法: 概念: Manacher 算法,经常被称作马拉车,可以以 \(\mathcal{O}(n)\) 的时间复杂度求出字符串关于回文子串一类的问题。 介绍: 首先举个例子,设字符串 \(s=\texttt{bbdkd}\) ...
分类:
编程语言 时间:
2021-02-17 15:06:24
阅读次数:
0
题:http://acm.hdu.edu.cn/showproblem.php?pid=6230 题意:求一个字符串中(长度<=5e5)中指定字符串个数; 指定字符串约束为:类似俩个回文串“镶嵌”,设有俩个回文串的回文中心位置分别为x和y(x<y),前者的回文半径涵盖的范围必须包含y ,同时后者的回 ...
分类:
其他好文 时间:
2020-10-21 20:33:08
阅读次数:
23
动态规划:时间复杂度是O(N^2) Manacher算法,时间复杂度是O(N) 这篇文章主要是想讲怎么样能正确的填二维动态规划的二维表 动态规划比较简单: 用一个二维数组,dp[ i ][ j ] 表示 下标 i ~ j 字符串是否是回文的,false or true 边界条件是 i - j = 0 ...
分类:
其他好文 时间:
2020-09-15 21:10:06
阅读次数:
24
给定一个字符串 s,找到 s 中最长的回文子串。 public static String longestPalindrome(String s) { //最大长度 int max=0; //最大长度的回文中心 int mi=0; //加#避免漏虚轴 char[] chars = addf(s); ...
分类:
其他好文 时间:
2020-09-14 19:04:06
阅读次数:
39
在字符串的头部插入'$',在每个字符之间插入'#'. 用p数组记录以某点为中心的最长回文半径,会发现,最长回文子串长度$maxlenth=p[i]-1$. 那么如何去求p数组呢?我们遍历每个字符,记录回文串能延伸到的最右端的位置$mx$,之后我们再去判断. (1) mx>i: 1:i的右边界小于mx ...
分类:
编程语言 时间:
2020-07-31 14:09:26
阅读次数:
94
扩展KMP 舞蹈链 卢卡斯定理/扩展卢卡斯 莫比乌斯反演 线段树分裂 LCT manacher 回文自动机 点分治 ...
分类:
编程语言 时间:
2020-07-20 23:01:57
阅读次数:
117
简述 Manacher算法,又称马拉车算法,它是用于求一个字符串的最长回文子串长度的算法,时间和空间复杂度为O(n)。 算法思想 求一个字符串的最长回文子串长度,我们如果用暴力来做,我们就要取出这个串的所有子串,然后判断这个子串是不是回文串,复杂度是n方的。 那么马拉车为何如此神奇能做到O(n)呢? ...
分类:
编程语言 时间:
2020-07-17 22:10:08
阅读次数:
116
详细讲解可以看这个 下面只是些模板 纯模板 int manacher() { // 将数组初始化 init(); int p[N*2],ans=0,mx=0,max_len=-1,id=0,index; // p[i]代表以i为中心的回文串半径,p[i]-1是以i为中心的最长回文串(相对于原字符串) ...
分类:
其他好文 时间:
2020-06-28 22:45:32
阅读次数:
63
传统方法:遍历每一个字符,以该字符为中点向两边查找。 问题1: 由于回文串长度的奇偶性,需要对对称轴的位置进行分别判断,这种解法的时间复杂度是O(n^2)。 如aabb对称轴为ab之间,而ababa对称轴为中间的a 需要分别对两种情况进行判断 问题2:子串被重复多次访问,降低了时间效率。 Manac ...
分类:
其他好文 时间:
2020-06-24 15:50:57
阅读次数:
51
最长回文子串 暴力法 动态规划法 manacher算法 HDU 3068 ...
分类:
其他好文 时间:
2020-06-11 21:55:01
阅读次数:
59