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
题目描述暴力解法:枚举原串起始位置,逐个匹配,复杂度O(mn)。优化思路:失配时,前面已匹配的字符可以提供信息。KMP算法:对于模式串任意位置 i ,如果我们知道一个 k 使得 i 位置前的 k 个元素和模式串最开始的前 k 个元素一一相等,那么第 i 个元素失配时就可以之间从第 k + 1 个元素...
分类:
编程语言 时间:
2015-04-21 20:35:55
阅读次数:
100
kmp又称烤(k)馍(m)片(p)算法,实际上是通过模式串本身的特性来优化模式串的匹配next[j]表示j之前的字符串中有长度为next[j]的相同前缀后缀失配时移动位置=失配字符所在位置-失配字符对应的next值,即j-next[j]next[0]=-1 表示当0位置失配时,要将字符串向右移1位1...
分类:
编程语言 时间:
2015-04-21 17:25:46
阅读次数:
282
前几天百度LBS部门实习二面,让写一个字符串匹配函数,当时忘记KMP怎么写了,就默默的写了一个暴力搜索,连尝试推导一下KMP都没有,结果自然是没有过,以后面试要多和面试官交流,就算忘记了,也要让他知道你试图推导,要不然他会觉得你可能都没有听过。 KMP是对前缀暴力搜索的改进,基于的想法其实是很...
分类:
编程语言 时间:
2015-04-21 14:24:25
阅读次数:
134
http://www.matrix67.com/blog/archives/115
Orz maxtix67
一直拖着到碰到了KMP算法的题才学。。
设有字符串A:abefgababef
模式串 B:abefgabef
当A与B进行匹配时,设i是A上的指针,j是B上的指针,则A和B匹配到第8位就会失配。按照常规方法,我们会将i跳回到2,j跳回到1进行匹配。观察之后我们会发...
分类:
编程语言 时间:
2015-04-21 11:21:20
阅读次数:
127
题目大意:
给定一个字符串S,计算出所有可能的前缀-后缀字符串的长度。前缀-后缀字符串指的是S的
子串不仅是S的前缀,还是S的后缀。比如S = "alala",前缀-后缀字符有{"a","ala","alala"}。
思路:
KMP算法的应用。在KMP算法中,当字符串匹配失败时,模式串的指针并没有指向0从头比
较,而是指向了一个特定的位置,因为这个Next[j]指向的位置pos前长度为Next[pos]的子
串,同模式串第j位前的长度为Next[j]的子串是相同的。为了找到既能做前缀又能做后缀的子
串,纳...
分类:
其他好文 时间:
2015-04-21 09:34:38
阅读次数:
160
这题真是太神了,好多实用的技巧。。首先肯定是要先把每个要输出的串当模式串把自动机给建出来的,如果一个一个串复制出来再一个个插入显然非常慢。。。我们用在自动机上插入模式串的方法来建,初始时在0,新加一个字符就想下爬(或者新建),维护一个父亲指针,删除的时候就可以爬上去,这样就可以O(n)建出来了。。
再考虑询问的问题,每次把串拿出来再放进自动机跑一遍显然太慢。。这里需要用到一个叫做fail树的东西...
分类:
编程语言 时间:
2015-04-20 09:36:29
阅读次数:
455
题目:亲和串Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9139 Accepted Submission(s): 4174Problem Description人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考...
分类:
其他好文 时间:
2015-04-18 17:44:26
阅读次数:
141
题目:OulipoTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5985 Accepted Submission(s): 2404Problem DescriptionThe French author Georges Perec ...
分类:
其他好文 时间:
2015-04-18 13:09:56
阅读次数:
134
题目:剪花布条Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10380 Accepted Submission(s): 6684Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图...
分类:
其他好文 时间:
2015-04-18 13:07:45
阅读次数:
141