题意:给你一个字符串问能否拆分为三个回文字符串?能就输出yes,否则输出no。知识补充:最长回文子串算法(Manacher算法):求解最长回文子串的线性时间复杂度算法,主要是通过中心扩展的方法极大地避免了重复计算。实现如下:
为了避免对字符串奇偶数的讨论,先对字符串做预处理如下:
规则为在字符间和两边插入'#'字符,为了避免越界处理,最两边插入'^'和'$'字符。
原本字符串为:asd
预处理后为:...
分类:
其他好文 时间:
2015-08-04 13:37:34
阅读次数:
121
前几晚 BC 的第二题,官方给出的题解是: 然后我结合昨天刚看的 Manacher 算法试着写了下,发现 pre、suf 数组挺难构造的,调试了好久,然后就对中间进行枚举了,复杂度应该是 O(n2) 吧,我第一次交时超时了,以为真的要用什么暴力压位,可是我还不会啊,然后作了一些少许的优化提交本...
分类:
其他好文 时间:
2015-08-04 13:09:10
阅读次数:
116
今天打算补前晚 BC 的第二题,发现要用到能在 O(n) 时间求最大回文子串长度的Manacher 算法,第一次听,于是便去百度了下,看了大半天,总算能看懂了其思想,至于他给出的代码模板我没能完全看懂,只好自己试着实现,发现理解了思想后还是能实现出来的,用自己的风格去写更好理解,先附上讲解Man.....
分类:
编程语言 时间:
2015-08-03 20:49:43
阅读次数:
142
题目地址:HDU 5340
题意:问是否能将字符串str分解为三段非空的回文串。
思路:我们根据Manacher算法对字符串进行处理,处理过程中产生的P数组,我们可以得到两个数组first和last。
first存储的是第一个回文串的半径可能值。
last存储的是第三个回文串的半径可能值。
根据first和last我们可以枚举第一个回文串和第三个回文串,然后根据半径找出第二个回文串的初始位...
分类:
编程语言 时间:
2015-08-03 17:00:40
阅读次数:
389
题目地址:HDU 3068
关于算法的详解:Manacher算法#include
#include
#include
#include
#include
#include
#include
#include
#include ...
分类:
编程语言 时间:
2015-08-03 14:47:03
阅读次数:
153
题目地址:POJ 3974
题意:求最长的回文串。
思路:同样是用Mancher算法在O(n)的时间内解决(我其实是来练练板子的#include
#include
#include
#include
#include
#include
#include <algorithm...
分类:
编程语言 时间:
2015-08-03 14:39:08
阅读次数:
99
题目描述:
判断是否能将字符串S分成三段非空回文串。
解题思路:
基本思路:我们可以枚举第一个字符串的结尾e和第三个字符串的开始s,那么第二个字符串就是从e+1到s-1,判断第二个字符串是否为回文即可...
分类:
其他好文 时间:
2015-08-02 18:22:12
阅读次数:
195
“//用manacher算法得到p[i]表示以该点为中心的回文串最长能延伸p[i]长度
//通过p[i]可以求得其pre[i] , suf[i]表示以i为最后一个前面,后面是否能形成回文串
//枚举中间的字符串的位置和长度得到答案
#include
#include
#include
using namespace std ;
const int...
分类:
其他好文 时间:
2015-08-02 11:49:04
阅读次数:
113
题意:
给定字符串,求字符串中的最长回文序列
解题思路:
manacher 算法
时间复杂度:O(N)
代码:
#include
#include
#include
#define MAXN 110010
using namespace std;
char b[MAXN],a[MAXN<<1];
int p[MA...
分类:
编程语言 时间:
2015-08-02 06:26:31
阅读次数:
146
最长回文
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10596 Accepted Submission(s): 3759
Problem Description
给出一个只由小写英文字符a,b,c...y,z组...
分类:
编程语言 时间:
2015-07-22 20:57:57
阅读次数:
168