■Knuth-Morris-Pratt(KMP)算法-听我的,别总重来。 发表于1977年的KMP算法是一种高效的匹配算法,消除了BF算法中回溯问题,即每次移动的距离可以不是1而是更大的数,也不需要回溯,BF算法的时间复杂度是O(m*n...
分类:
编程语言 时间:
2015-05-27 07:28:56
阅读次数:
226
本文简要谈一下串的模式匹配。主要阐述BF算法和KMP算法。力求讲的清楚又简洁。
一 BF算法
核心思想是:对于主串s和模式串t,长度令为len1,len2, 依次遍历主串s,即第一次从位置0开始len2个字符是否与t对应的字符相等,如果完全相等,匹配成功;否则,从下个位置1开始,再次比较从1开始len2个字符是否与t对应的字符相等。。。。
BF算法思路清晰简单,但是每次匹配不成功时都要回...
分类:
编程语言 时间:
2015-05-26 23:30:56
阅读次数:
430
一,问题引入. 有两个字符串,s[0...n-1] 和 t[0...m-1] 在字符串s中找字符串t;二,思考. 对于这个问题可以逐一比较,即:ss[p]s[p+1]s[p+2]...s[i-1]s[i]......s[n-1]tt[0]t[1]t[2]...t[j-1]t[j]...t[m-1]即...
分类:
编程语言 时间:
2015-05-26 23:07:34
阅读次数:
202
题意:给一个字符串,问最多可以用多少个子串重复构成,例如ababab是3个ab组成的。解法:kmp模板题……以前做过……然而现在几乎忘了失败指针什么的怎么来的……http://kb.cnblogs.com/page/176818/讲的挺好的……根据最后一个字符记录的失败指针位置可以知道最后一个重复的...
分类:
其他好文 时间:
2015-05-26 21:08:17
阅读次数:
103
http://acm.uestc.edu.cn/#/problem/show/1091秋实大哥の恋爱物语Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others)SubmitStatus传说有这么一....
分类:
其他好文 时间:
2015-05-24 23:32:58
阅读次数:
243
扩展kmp: 用于求串的各个后缀与原串的最长公共前缀的长度;上图的是字符串自匹配的过程:图一: 假设现在匹配到i-1了,开始求next [ i ] 的值,此时,k记录的是到目前为止匹配到的最远的位置的那一次的起点,p标志的是已经匹配过的最远的点;图二: 因为前面是匹配过的,所以可以知道,...
分类:
其他好文 时间:
2015-05-24 14:08:06
阅读次数:
157
/** * Created by cdpmac on 15/5/20. */var mainstr="BCDABCADABCABACABCAB";var substr= "ABCAB";////for(var i =0;i1&&matchmax<arr.length/2){ ...
分类:
编程语言 时间:
2015-05-22 18:45:18
阅读次数:
126
对于一个字符串 s 以及子串 t ,拓展KMP可以用来求 t 与 s 的每个子串的最长公共前缀 ext [ i ],当然,如果有某个 ext 值等于 t 串的长度 lent ,那么就说明从其对应的 i 开始的一个长 lent 的子串即为 t 串,因此可以同样线性地求出 s 串中的每个 t 子串的出现...
分类:
其他好文 时间:
2015-05-19 18:54:45
阅读次数:
115
1 #include 2 #include 3 void next(char T[],int nextArr[],int n); 4 5 int match(char S[],int tn,char T[],int sn,int nextArr[]); 6 7 int main(void){ ...
分类:
编程语言 时间:
2015-05-18 16:17:26
阅读次数:
172
1、字符串问题形式化定义:假设文本是一个长度为n的T[1..n],而模式是一个长度为m的数组P[1..m],其中m<=n,如果有T[s+1..s+m]==P[1..m],那么就称模式P在T中出现。s为有效偏移,否则称为无效偏移。 2、方法:首先...
分类:
编程语言 时间:
2015-05-18 13:11:38
阅读次数:
184