朴素模式匹配算法的存在大量的重复匹配操作,时间复杂度为O(m*n),其中m表示主串的长度,n表示模式串的长度,但是算法好理解。另外有一种高效的算法,被称为KMP,该算法的目标就是去掉多余的重复匹配过程,但是算法很难理解,主要是通过构造一个next[]数组来实现,可以实现线性的时间复杂度O(m+n),...
分类:
编程语言 时间:
2015-05-07 12:15:10
阅读次数:
137
对于KMP算法,最重要的是要把握其中的next数组的含义及求法考虑一个模式字符串:b1b2...bn,定义next[s]如下:next[s] is the longest proper prefix of b1b2...bs that is also a suffix of b1b2...bs#in...
分类:
编程语言 时间:
2015-05-06 21:08:11
阅读次数:
143
题目描述Trie 图就是在 Trie 树上建立 fail 指针,类似于KMP算法中的next数组的作用。这个数据结构的作用是判断一个字符串中是否包含一组字符串中的任意一个。结构体定义是这样的:typedef struct trie_node { trie_node *nodes[26]; trie_...
分类:
其他好文 时间:
2015-04-24 20:44:14
阅读次数:
120
#include#include#include#includeint a[1000010], b[10010], next[10010];int n, m;void GetNext(int b[])//获得next数组{ int k = -1, j = 0; next[0] = -1;...
分类:
Web程序 时间:
2015-04-24 12:23:50
阅读次数:
119
题目传送:POJ - 2406
思路:就是利用kmp中next数组的特性来求最大周期的
AC代码:
#include
#include
#include
using namespace std;
const int maxn = 1000005;
char s[maxn];
int next[maxn];
int main() {
while(scanf(...
分类:
其他好文 时间:
2015-04-24 10:43:27
阅读次数:
130
题目大意:
给你两个串S1和S2,求既是S1的前缀同时是S2的后缀的最长字符串及长度。
思路:
KMP算法中Next[j] == k的实质是当前字母不匹配时,模式串的前k项(S0~Sk-1)和位置j前
的k项(Sj-1-k~Sj-1)是相等的,这个k值是所有满足上面情况最大的。那么Next[len]的含义
就是模式串的最长的前缀和后缀相等的串长度。
利用Next[]的性质,先将串S2连接到S1后边。求S1的Next[]数组。那么,现在的Next[len]
就是S1的前缀和S2的后缀最长的长度,这是当这个长...
分类:
其他好文 时间:
2015-04-22 22:14:28
阅读次数:
116
DescriptionLast years Chicago was full of gangster fights and strange murders. The chief of the police got really tired of all these crimes, and decided to arrest the mafia leaders.Unfortunately, the s...
分类:
编程语言 时间:
2015-04-22 18:14:34
阅读次数:
155
mark一下,重新温习了 KMP
KMP复杂度O(n+m)
这里有一个解释的超级的好的博客,大家可以去看一下:http://blog.csdn.net/v_july_v/article/details/7041827
换言之,对于给定的模式串:ABCDABD,它的最大长度表及next 数组分别如下:
根据最大长度表求出了next 数组后,从而有...
分类:
编程语言 时间:
2015-04-22 13:59:54
阅读次数:
158
题目:Cyclic NacklaceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3387 Accepted Submission(s): 1549Problem DescriptionCC always becomes very...
分类:
编程语言 时间:
2015-04-18 17:51:02
阅读次数:
179