昨天做了leetcode里的 Longest Palindromic Substring ,一开始用动态规划O(N^2),不管怎么改都超时了。。。于是在大神的帮助下,找到了传说中的Manacher算法,居然能在O(n)内求出来,瞬间给跪了。
本屌认为,这个算法主要是充分的利用了以前的匹配的结果,来起到了降低时间复杂度的作用,这点跟KMP算是有点类似。在预处理时有个小技巧就是将第0,1为设...
分类:
其他好文 时间:
2014-06-20 12:15:22
阅读次数:
305
原文链接 [收藏] 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发...
分类:
其他好文 时间:
2014-06-18 22:50:04
阅读次数:
259
#include #include #include char a[1000001],b[1000001];int next[1000001];int l,l2;void Getnext(){ int i=0; int j=-1; next[0]=-1; while(i=l2...
分类:
Web程序 时间:
2014-06-18 09:29:37
阅读次数:
221
我们在一个母字符串中查找一个子字符串有很多方法。KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度。当然我们可以看到这个算法针对的是子串有对称属性,如果有对称属性,那么就需要向前查找是否有可以再次匹配的内容。在KMP算法中有个数组,叫做前缀数组,也有...
分类:
其他好文 时间:
2014-06-17 00:24:23
阅读次数:
212
int kmp(char * t,int lenT,char * pat,int lenPat){
int posP=0,posT=0; int[] f=partialMatch(pat,lenPat)//获取pat字符串的部分匹配数组 while(posP
str[0:k]==...
分类:
其他好文 时间:
2014-06-16 00:57:05
阅读次数:
268
背景朴素匹配算法太低效了。冗余过多,已经比较过的,没必要重复;可以从比较结果中推导出来的,也没必要再重复。核心主串不回溯,变化要匹配的串的下一次比较的位置。实现两个函数,一个提供next数组,即存储要匹配的串的每一个元素匹配失败后,下一次要比较的位置的数组。另一个实现匹配。java代码public
...
分类:
其他好文 时间:
2014-06-10 11:32:20
阅读次数:
239
kmp算法。 1 #include 2 #include 3 4 char
src[10005], des[1000005]; 5 int next[10005], total; 6 7 void kmp(char des[],
char src[]){ 8 int ld = str...
分类:
其他好文 时间:
2014-06-09 17:46:37
阅读次数:
264
字符串匹配这也是个老题了,方法主要有下面4种,
1. 暴利破解法(BF),这个没啥说的,就是一轮一轮的比较,知道遇到相匹配的,这个的时间复杂度为O(n^2)。
2. KMP,这应该是字符串匹配领域中最长听说的算法了吧。
3. Horspool算法,这个不常听说,但是也是很有名的。
4. Boyer-Moore,这个听说过的人应该也不会很多,这个算法在大量字符串的情况下,效率是最高的,能达到kmp的3到4倍。
上面四种算法都很重要,一般标准库中的字符串匹配都使用的是暴力法。
上面四种算法详细的见我下面的这几篇...
分类:
其他好文 时间:
2014-06-08 03:19:54
阅读次数:
187
题目来源:Light OJ 1268 Unlucky Strings
题意:给你一些可以用的字符 然后求组成不包含给定字符串的方案数
思路:矩阵经典问题 从i走k步路到达j的方案数 可以用矩阵快速幂求解
对于求长度为n的字符的方案数 就是走n步路 求走法
可以用KMP求出走一步 从前i个字符到前j个字符的方案数 这点有点不好理解 想一想
#include
#include
#...
分类:
其他好文 时间:
2014-06-07 14:33:43
阅读次数:
303
这道题本来想对了,可是因为hdu对pascal语言的限制是我认为自己想错了,结果一看题解发现自己对了……题意:给以字符串计算出以前i个字符为前缀的字符中在主串中出现的次数和如:num(abab)=num(a)+num(ab)+num(aba)+num(abab)=2+2+1+1=6;题解:next[...
分类:
其他好文 时间:
2014-06-06 17:30:22
阅读次数:
227