题意:有两个字符串,找一个最长子串是的该串既是第一个字的前缀,又是第二个串的后缀。分析:把两个串并起来然后在中间加一个无关字符,求next数组即可。 1 #include 2 #include 3 4 const int maxn = 50000 + 10; 5 char s1[maxn * ...
分类:
其他好文 时间:
2014-11-26 20:36:01
阅读次数:
239
题意:找出这些串中最长的公共子串(长度≥3),如果长度相同输出字典序最小的那个。分析:用库函数strstr直接查找就好了,用KMP反而是杀鸡用牛刀。 1 #include 2 #include 3 4 char a[15][70], sub[70]; 5 int p[70], l; 6 7 ...
分类:
其他好文 时间:
2014-11-26 18:48:54
阅读次数:
156
KMP是一种复杂度较低的字符串比较算法。基本思路是对欲匹配字符串进行预处理,分析当k位匹配时可以后移的位数,所得的数构成该字符串的特征向量。求特征向量Next 1 int* Next(string p){ 2 int m=p.length(); 3 int *N=new int[m]; 4...
分类:
编程语言 时间:
2014-11-26 15:49:23
阅读次数:
214
1 ////////////////////////////////////////////////////////// 2 // String.cpp 3 // 4 // author:Leetao 5 //////////////////////////////////////////////....
分类:
编程语言 时间:
2014-11-26 01:26:37
阅读次数:
158
KMP算法时间复杂度为O(m+n),直观地看,是因为在匹配过程中指针 i 没有回溯。KMP算法的核心思想是利用已经得到的部分匹配信息来进行后面的匹配过程。 KMP算法思路:从主串s的第pos个字符起和模式的第一个字符比较之,若相等,继续逐个比较后继字符。当一趟匹配过程中出现字符比较不等时,不回...
分类:
编程语言 时间:
2014-11-26 01:16:49
阅读次数:
250
packagearithmetic;/***Java实现KMP算法**思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针,*而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远*的一段距离后,继续进行比较。**时间复杂度O(n+m)**@author 青梅**/publicclas...
分类:
编程语言 时间:
2014-11-25 12:15:35
阅读次数:
179
http://www.lydsy.com/JudgeOnline/problem.php?id=1030其实做了1009也不会感到很难了,无非将kmp变成了ac自动机。设f[i,j]表示前i个串当前匹配到j的节点的方案数。。然后自己想。sb错1:ac自动机的节点开小了(自己想错了。。以为最多节点就是...
分类:
Web程序 时间:
2014-11-24 15:03:33
阅读次数:
214
KMP算法是一种用于字符串匹配的算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,所以叫KMP算法。
字符串匹配,就是有一个目标字符串S和模式字符串P,然后查找P在S中是否有出现,出现的话,位置是什么地方。
最简单粗暴的方法就是逐个字符比较,从S的第0个字符开始,和P的第0个字符比较,如果相等,再比较后面一个,如果在第n个出现不想等,那么就把S置回第1个(上一次的后...
分类:
其他好文 时间:
2014-11-24 10:08:42
阅读次数:
190
这里写了我的KMP自我研究的结果,重点在于KMP算法的思考路径,而不在于算法本身...
分类:
其他好文 时间:
2014-11-22 07:09:02
阅读次数:
188
题意:求一个字符串的相同前缀后缀的所有可能的长度,这里该字符串其本身也算自己的前缀和后缀。分析:我们知道next数组的性质是,该字符之前的字符串的最大相同前缀后缀。既然知道了最大的,即next[len]。递归一次next[ next[len] ],就能求得更小的前缀。不断的递归把所有所有可能的长度找...
分类:
其他好文 时间:
2014-11-21 10:29:01
阅读次数:
252