这道题对更加深入地理解next数组有很大帮助。
基本思路:
字符编号从0开始,那么if(i%(i-next[i])==0),则i前面的串为一个轮回串,其中轮回子串出现i/(i-next[i])次。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358...
分类:
其他好文 时间:
2014-08-06 15:01:01
阅读次数:
190
这题跟HDU 1358 Period (KMP)
差不多,稍微修改代码就行了。
关于KMP的更多知识,请关注从头到尾彻底理解KMP(2014年8月4日版)
。
#include
#include
int n,next[1000000];
char p[1000000];
void getnext()
{
int k=0,j=1;
next[0]=-1;next[1]=0;
...
分类:
其他好文 时间:
2014-08-06 14:48:01
阅读次数:
204
给出两个字符串,寻找一个字符串在另外一个字符串出现的频率。
原来kmp还有一个陷阱,下面注释出了,下标没步进好,就有一定几率出现超时的,也有一定几率出现错误,视具体的串而定。
修改一下就好了,kmp速度是很快的。
#include
#include
const int MAX_TXT = 1000001;
const int MAX_WORD = 10001;
int ...
分类:
其他好文 时间:
2014-08-06 01:59:00
阅读次数:
195
KMP查找整数数列,不是查找字符串。
原理是一样的,不过把字符串转换为数列,其他基本上是一样的。
#include
#include
const int MAX_N = 1000001;
const int MAX_M = 10001;
int strN[MAX_N], strM[MAX_M], next[MAX_M], N, M;
void getNext()
{
mems...
分类:
其他好文 时间:
2014-08-05 22:37:10
阅读次数:
194
KMP算法是快速字符串匹配算法,朴素的暴力算法的时间复杂度为O(n*m),而KMP通过对模式串进行相应的处理,能够达到O(m+n)的速度。
我们知道在字符串匹配的时候最消耗时间的就是当匹配到第 i 个位置发现不匹配时,下一次又对模式串进行一次重新匹配,那么假如模式串中有很多相同的字母的话,这样做了很多重复的事情,那么我可以对模式串进行一定的处理,处理处一个对应的数组,让他保存假如这里不匹配是我下...
分类:
其他好文 时间:
2014-08-05 09:37:19
阅读次数:
172
今天一天鼓捣了两种字符串匹配的算法,KMP算法和BM算法,说实话,BM算法还是第一次听说,以前只知道BM算法的说,总之一句话,要学习的还是很多的,看了BM算法,只能感叹作者的高大上了。看了好几篇文章,终于算是把BM算法实现了,并且调试运行成功了,把这学习的经过记录下来,聊表纪念。 1 #inclu....
分类:
其他好文 时间:
2014-08-05 00:08:18
阅读次数:
314
对于数组s[0~n-1],计算next[0~n](多计算一位)。
考虑next[n],假设t=n-next[n],如果n%t==0,则t就是问题的解,否则解为1。
这样考虑:
比如字符串"abababab",
a b a b a b a b *
next -1 0 1 2 3 4 5 6 7
考虑这样的模式匹配,将"ababa...
分类:
其他好文 时间:
2014-08-04 21:38:08
阅读次数:
294
对于KMP算法中next函数的应用
题意是对于一个字符串的前缀和后缀比较是否相等,再把相等的可能按字符串长度进行输出
#include
#include
#include
using namespace std;
int len;
int next[1000005];
char s[1000005];
int kmp_next()
{
int i=0,j=-1;
...
分类:
其他好文 时间:
2014-08-04 21:32:38
阅读次数:
239
题意是求第一个字符的前缀和后一个字符串的后缀最大的公共序列,并输出。。。
将两个字符串合并,求出kmp中的next数组就行,但要注意不要大于某个字符串的长度;
#include
#include
const int N = 50005;
#define min(a,b) ((a)
char s1[N], s2[N], s3[N * 2];
int next[N * 2];...
分类:
其他好文 时间:
2014-08-04 17:36:47
阅读次数:
207
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686题目大意:寻找子链在母链中出现的次数。 1 #include 2 #include 3 #include 4 using namespace std; 5 int next[10010],su...
分类:
其他好文 时间:
2014-08-04 17:33:17
阅读次数:
210