学习kmp算法我最后是看的数据结构书上的一本教材学会的。。我觉得kmp相对于普通的BF算法就是避免了很多不必要的匹配,而kmp算法的精髓自然就在于next数组的运用。。。而next数组简而言之就是存储的就是模式串中第j个字符与主串中相应字符“失配”时,在模式串中需要重新和主串中失配的字符相比较的位置。。。我觉得这句概括挺好的。。。
题1:
hdu 1711 number sequen...
分类:
其他好文 时间:
2014-08-04 14:34:27
阅读次数:
277
首先声明一下,这里的规律指的是循环,即找到最小循环周期。这么一说大家心里肯定有数了吧,“不就是next数组性质的应用嘛”。先来看一道题ZOJ 3785What day is that day?Time Limit:2 Seconds Memory Limit:65536 KBIt's Saturda...
分类:
其他好文 时间:
2014-08-03 01:44:54
阅读次数:
403
UVA 10298 - Power Strings
题目链接
题意:本意其实就是,给定一个字符串,求出最小循环节需要几次循环出原字符串
思路:利用KMP中next数组的性质,n - next[n]就是最小循环节,然后n / 循环节就是答案
代码:
#include
#include
const int N = 1000005;
char str[N];
int ...
分类:
其他好文 时间:
2014-08-02 18:21:43
阅读次数:
282
UVA 11468 - Substring
题目链接
题意:给定一些模式串,然后给出一些字母出现的概率,每次随机出现一个字母,要求出这些字母出现L个组成的字符串不包含(即不是它的连续字串)已有模式串的概率
思路:AC自动机,先构造出AC自动机,构造的时候利用next数组的特性,记录下每个位置是否有经过一个单词结点,如果有这个结点就是不能走的结点,那么问题就变成了只能在能走的结点上...
分类:
其他好文 时间:
2014-08-01 23:08:22
阅读次数:
275
A -KMP模式匹配 一(串)Crawling in process...Crawling failedTime Limit:1000MSMemory Limit:131072KB 64bit IO Format:%lld & %lluDescription求子串的next值,用next数组存放,所...
分类:
其他好文 时间:
2014-08-01 22:34:22
阅读次数:
170
UVA 1328 - Period
题目链接
题意:给定一个字符串,求出有几个位置的前缀串是由个数大于1的串循环得到的,求出位置和循环次数
思路:利用kmp的next数组的性质,i - next[i]就是循环长度,然后判断一下是不是正好是倍数即可
代码:
#include
#include
const int N = 1000005;
int n, next[...
分类:
其他好文 时间:
2014-08-01 13:49:11
阅读次数:
171
HDU 2594 Simpsons’ Hidden Talents (字符串-KMP)
题目大意:
给你字符串s1和s2,问你s1的前缀和s2的后缀最长相同的串多长?
解题思路:
牢记KMP Next数组的含义,将s1和s2拼接在一起,next[len]也就是最终答案。...
分类:
其他好文 时间:
2014-07-29 21:54:52
阅读次数:
333
题目来源:http://poj.org/problem?id=2406主要考察KMP算法中next数组的性质,根据next[len]可以知道前len-1字符串最长前缀和后缀的循环长度那么len-next[len]即为一个循环单位的长度,倘若循环单位len-next[len]不是len的整数倍,则an...
分类:
其他好文 时间:
2014-07-29 17:07:22
阅读次数:
168
题目大意,给出一个字符串s,求最大的k,使得s能表示成a^k的形式,如 abab 可以表示成(ab)^2;方法:首先 先求kmp算法求出next数组;如果 len mod(len-next[len])==0 ,答案就是len /(len-next[len]),否则答案是1;证明如下; 如果s能表示成...
分类:
其他好文 时间:
2014-07-29 12:11:16
阅读次数:
171