题意:给定一个主串,和单词序列,问最少在主串删除多少字母,可以使其匹配到单词序列,如
browndcodw
cow
milk
white
black
brown
farmer
删除主串中的两个d,brown和cow就与整个主串匹配了...
分类:
其他好文 时间:
2014-11-01 16:23:58
阅读次数:
164
问题背景是找到原串中能够与给定串完全匹配的部分,最容易想到的双重循环比对当然不行(时间复杂度太高),最经典的解法就是KMP算法,先构造跳转表(next表),再比对,避免主串上的回溯,以节省时间。KMP算法比较难理解,本文主要对其核心next函数作以解析。
分类:
编程语言 时间:
2014-10-18 00:37:36
阅读次数:
229
在很多编程语言中,都封装了字符串替换的操作,那么我们这里自己用C语言来实现一个字符串替换的函数。具体需求为:Replace(String S,String T,String V),用V替换主串S中出现的所有与T相等的不重叠的子串。字符串替换这个操作,需要结合我们前面讲到的几个函数。香格里拉娱乐城首先...
分类:
其他好文 时间:
2014-09-19 10:01:25
阅读次数:
254
我们思考下算法,然后设计函数。假设主串 s1=nowamagic.net,子串sub=magic。我们要寻找sub在s1中的首个出现位置。设i用于主串s1中当前位置下标值,j用于子串sub中当前位置下标值。伯爵娱乐城首先我们比较s1[1]与sub[1],如果相同的话,可能子串就开始了。如果不相等,那...
分类:
其他好文 时间:
2014-09-19 09:59:45
阅读次数:
225
KMP算法是在已知模式串的next函数值的基础上执行的,此函数值仅取决 于模式串本身而和相匹配的主串无关,相当于离线计算好模式串的next函数值,KMP搜索子串过程中产生“失配”时,保持主串指针不变,通过查表确定next[j],移动模式串的指针到该位置再进行比较。主要是next函数值的确定。...
分类:
编程语言 时间:
2014-09-16 20:40:11
阅读次数:
304
定义:设有主串S和子串t,子串的定位就是要在主串S中找到一个与子串t相等的子串。通常把主串S称作目标串,子串t称作模式串,因此定位也称作模式匹配。
常用两种算法:
1brute-force算法
思路:主串标记指针每次移动一个位置,然后和子串比较,如何相等则返回当前主串指针的位置。
模式匹配过程如图:
图略
上面算法的缺点:主串指针回溯,当与模式串部分匹配后,每次主...
分类:
其他好文 时间:
2014-09-11 12:33:21
阅读次数:
120
首先需要了解一下BF暴力匹配算法,这个算法为每一个串设置一个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针回到开始后移之前的位置的下一位,模式串指针回到最开始。
对比一下KMP算法,同样是设置两个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针不变,模式串指针回溯一定的距离。具体模式串指针回溯多少,是第一次看KMP算法的人比较难以理解的,其实仔细想想,模式串的前缀和后缀其实也是...
分类:
其他好文 时间:
2014-09-03 11:21:16
阅读次数:
136
KMP算法是一种改进的字符串匹配算法。适用于模式串P有循环重复段的情况下。 原理: 主串 S:S1, S2, …, …, …, …, …, …, Si-k+1, …, Si-1, Si 模式串P:(P1, P2, …, Pk-1,) Pk, …, (Pj-k+1, …, Pj-1,) Pj Pj与S...
分类:
其他好文 时间:
2014-08-30 13:49:09
阅读次数:
221
KMP算法是一种改进的字符串匹配算法。适用于模式串P有循环重复段的情况下。原理:主串 S:S1, S2, …, …, …, …, …, …, Si-k+1, …, Si-1, Si模式串P:(P1, P2, …, Pk-1,) Pk, …, (Pj-k+1, …, Pj-1,) PjPj与Si不匹配...
分类:
其他好文 时间:
2014-08-29 17:59:38
阅读次数:
187
var str="abcbababcbababcbababcabcbaba";//主串var ts="bcabcbaba";//子串function BF(s,t){//BF算法 var i=0,j=0,v=-1; while(i=t.length){ ...
分类:
编程语言 时间:
2014-08-26 13:27:06
阅读次数:
277