HDU 5371题意:定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分相同,第一部分与第二部分对称。
现在给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度。思路:来自官方题解:修正了一些题解错别字(误
先用求回文串的Manacher算法,求出以第i个点为中心的回文串长度,记录到数组p中
要满足题目所要求的内容,需要使得两个相邻的回文串,共享中间的一部...
分类:
其他好文 时间:
2015-08-11 23:35:47
阅读次数:
464
题意:给一个序列,找出1个连续子序列,将其平分成前,中,后等长的3段子序列,要求【前】和【中】是回文,【中】和【后】是回文。求3段最长为多少?由于平分的关系,所以答案应该是3的倍数。思路:先Manacher求最长子串,利用期间所记录的P 数组,穷举一下所有可能的前两串,再用O(1)时间判断第3串.....
分类:
其他好文 时间:
2015-08-11 23:17:43
阅读次数:
160
【题目】给定一个字符串str,返回str中的最长回文子串的长度。【举例】str=“123”。其中的最长回文子串“1”或者“2”或者“3”,所以返回1。str=“abc1234321ab”。其中的最长回文子串“1234321”,所以返回7。【要求】如果str长度为N,时间复杂度为O(N)。题目分析:1...
分类:
编程语言 时间:
2015-08-11 21:17:51
阅读次数:
153
Three PalindromesTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1244Accepted Submission(s): 415Pr...
分类:
其他好文 时间:
2015-08-11 21:07:10
阅读次数:
103
O(n)回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。 这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear...
分类:
编程语言 时间:
2015-08-11 20:45:30
阅读次数:
123
容易联想到利用manacher算法获得len数组,然后枚举第二段的长度判断能否和第三段对应上,能的话就更新答案。另外枚举长度的时候,小于等于当前答案的长度就没有必要枚举了,不然可能会超时。 1 #include 2 #include 3 #include 4 using namespace s...
分类:
其他好文 时间:
2015-08-11 20:44:16
阅读次数:
108
//给一个序列,让求其最大子序列
//这个序列由三段组成,第一段和第二段对称,第一段和第三段一样
//manacher算法求得p[i]
//枚举第二段的起点和长度,得到结果
#include
#include
#include
using namespace std ;
const int maxn = 2e5 + 10 ;
int str[ma...
分类:
编程语言 时间:
2015-08-11 18:43:18
阅读次数:
131
题目传送门 1 /* 2 Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 3 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间,位运算 >>1 比 /2 速度快,用了程序跑快200ms左右,位运算大...
分类:
其他好文 时间:
2015-08-08 11:44:58
阅读次数:
101
题目传送门关于求解最长回文子串,有dp做法,也有同样n^2的但只用O(1)的空间,还有KMP,后缀数组?? 1 int main(void) { 2 while (scanf ("%s", str + 1) == 1) { 3 int len = strlen (st...
分类:
其他好文 时间:
2015-08-07 21:51:49
阅读次数:
119
题目:
在一个长度为n的数组里面找回文串,要求回文串从中间向两边一次递减
思路:
manacher算法:时间复杂度O(n)
在manacher过程中添加限制语句保证题目要求即可
st[i-p[i]]st[i-p[i]+2]///表示回文串的左侧部分,前面要比后面的小
代码:
#include
#include
#define MAXN 100010
using...
分类:
其他好文 时间:
2015-08-07 20:15:58
阅读次数:
103