manacher算法介绍
先用求回文串的Manacher算法,求出以第i个点和第i+1个点为中心的回文串长度,记录到数组c中 比如 10 9 8 8 9 10 10 9 8 我们通过运行Manacher求出第i个点和第i+1个点为中心的回文串长度 0 0 6 0 0 6 0 0 0
两个8为中心,10 9 8 8 9 10是个回文串,长度是6。 两个10为中心,8 9 10 10 ...
分类:
其他好文 时间:
2015-08-12 16:48:40
阅读次数:
286
http://acm.hdu.edu.cn/showproblem.php?pid=5340/*Manacher算法:O(n) 实现最长回文子串算法实现:先向原字符串中插入一个原来串不存在的字符,一般用'#',再O(n)遍历一遍,用一个数组p[i]来记录以str[i]为中心的回文半径(注意str[i...
分类:
编程语言 时间:
2015-08-12 16:41:34
阅读次数:
126
题意:找三个连续子序列a b c,满足a b对称且b c对称
思路:先求出序列中以每个位置为中心的回文串长度存在p[i]数组里,用manacher算法,O(n)的时间,然后遍历p数组,如果在当前位置的回文串范围内,与之后的位置上的回文串范围能覆盖彼此任意一个的至少一半,就说明满足条件,依此找出最优解
还在wa的同学可以试试我代码下面的数据
代码:
#include
#include
#...
分类:
其他好文 时间:
2015-08-12 11:38:09
阅读次数:
128
题意:给定一个有n个数字的序列,找出一个连续的子序列满足这样的条件:平均分成三段,第一段与第三段一样,第二段是第一段的倒序。求这样的子序列的最大长度。数据范围:n~100000
分析:
上面的条件抽象出来其实就是双回文串,所以题目就是求一个序列的最长双回文串。
主体做法是:
1.先用manacher算法O(n)求出每个元素的最大回文半径;
2.把每个元素看成一个圆心,那么两个点能构成双回...
分类:
编程语言 时间:
2015-08-12 06:45:23
阅读次数:
156
题意,给定一个100000 的串,求他一个子串,使得将子串分成三部分有后,第一部分=第三部分,第一部分与第二部分对称(回文)首先我们需要处理出以i为轴的回文串的两端,这个事情可以用Manacher算法完成,复杂度O(n)http://blog.csdn.net/ggggiqnypgjg/articl...
分类:
其他好文 时间:
2015-08-12 01:17:56
阅读次数:
102
HDU 5371题意:定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称。
现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度。思路:来自官方题解:修正了一些题解错别字(误
先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中
要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部...
分类:
其他好文 时间:
2015-08-11 23:35:47
阅读次数:
464
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5371题意:把一个数字串A翻过来(abc翻过来为cba)的操作为-A,我们称A-AA这样的串为N-sequence,现在给你一个数字串,问你这个串中最长的N-sequence子串长度解:可以想到A-A是一...
分类:
其他好文 时间:
2015-08-11 22:52:38
阅读次数:
171
【题目】给定一个字符串str,返回str中的最长回文子串的长度。【举例】str=“123”。其中的最长回文子串“1”或者“2”或者“3”,所以返回1。str=“abc1234321ab”。其中的最长回文子串“1234321”,所以返回7。【要求】如果str长度为N,时间复杂度为O(N)。题目分析:1...
分类:
编程语言 时间:
2015-08-11 21:17:51
阅读次数:
153
O(n)回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。 这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear...
分类:
编程语言 时间:
2015-08-11 20:45:30
阅读次数:
123