參考:从头到尾彻底理解KMP 在字符串 str 中 匹配模式串 pattern 1. 计算模式串的 next 数组; 2. 在字符串中匹配模式串;当一个字符匹配时,str[i++], pattern[k++] 继续匹配下一个字符;当当前字符不匹配时。依据 next 数组移动模式字符串。k = nex ...
分类:
其他好文 时间:
2017-06-17 17:14:07
阅读次数:
144
这个算法太狗血,弄了好几天才明白一点,而且网上不同的博客写的方法不相同,表示很无奈啊。。。 接下来我要讲一讲我理解的KMP,我理解的有点浅,主要给几个事例,就不模拟计算过程了,具体KMP是什么,或者想要知道大致模拟过程的,自行百度。 先粘上代码 next数组的事例 位置都是从0开始 abc -1 0 ...
分类:
编程语言 时间:
2017-05-28 16:08:33
阅读次数:
172
一、问题描述: 对于两个字符串S、T,找到T在S中第一次出现的起始位置,若T未在S中出现,则返回-1。 二、输入描述: 两个字符串S、T。 三、输出描述: 字符串T在S中第一次出现的起始位置,若未出现,则返回-1。 四、输入例子: ababaababcbababc 五、输出例子: 5 六、KMP算法 ...
分类:
编程语言 时间:
2017-05-23 23:49:40
阅读次数:
353
nxt数组为KMP的next数组num[i]储存了i前面可以匹配的串的个数。先在KMP求nxt中顺便求出num最后再找到对于i的最大的前后缀不重叠的可匹配的j,ans*=(num[j]+1)%1000000007ans即为答案 1 #include<cstdio> 2 #include<cstrin ...
分类:
其他好文 时间:
2017-05-22 12:07:19
阅读次数:
189
UVA 1328 - Period 题目链接 题意:给定一个字符串,求出有几个位置的前缀串是由个数大于1的串循环得到的。求出位置和循环次数 思路:利用kmp的next数组的性质,i - next[i]就是循环长度,然后推断一下是不是正好是倍数就可以 代码: #include <cstdio> #in ...
分类:
其他好文 时间:
2017-05-21 12:48:06
阅读次数:
185
题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解KMP算法。 园长:“对于一个字符串S,它的长度为L。我们可以在O(L)的时间内,求 ...
分类:
编程语言 时间:
2017-05-15 12:03:02
阅读次数:
163
原文地址:http://www.cnblogs.com/GXZlegend/p/6827027.html 题目描述 一个串是有限个小写字符的序列,特别的,一个空序列也可以是一个串. 一个串P是串A的前缀, 当且仅当存在串B, 使得 A = PB. 如果 P A 并且 P 不是一个空串,那么我们说 P ...
分类:
编程语言 时间:
2017-05-08 20:59:44
阅读次数:
213
OJ题号:洛谷2375、BZOJ3670 思路: 一开始先写了一个裸的KMP,在求next数组(f数组)的时候加了一个判断j<<1是否>i+1(若大于则说明有重叠部分),后来发现并不能这样做。因为这样会影响到后面next数组的求值。后来看了一个题解,里面的思路是重新做一遍求next的过程,同时再判断 ...
分类:
其他好文 时间:
2017-05-07 21:10:49
阅读次数:
181
For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the pr ...
分类:
编程语言 时间:
2017-05-04 22:03:58
阅读次数:
212
查看原题 题意大致是:给你一个字符串算这里面全部前缀出现的次数和。比方字符串abab,a出现2次。ab出现2次,aba出现1次。abab出现1次。总计6次。 而且结果太大。要求对1007进行模运算。 AC代码 #include <iostream> using namespace std; #inc ...
分类:
编程语言 时间:
2017-05-03 14:34:22
阅读次数:
243