算法的核心有以下两点:
1. 移动位数=
已匹配的字符数- 对应部分匹配值
2. 部分匹配表的计算
以在StringstrSrc = ”ababcabcacbab”中寻找子串String strSub = ”abcac”为例进行说明
根据计算可知abcac的部分匹配表为:(部分匹配表的计算过程将在最后给出)
a
b
c...
分类:
编程语言 时间:
2015-08-27 16:43:31
阅读次数:
186
设目标字符串S,起配位置为j;模式字符串T,起配位置为i。暴力匹配:每次失配后,从j+1位置重新开始和T匹配。伪代码:def index_BF(T, S, pos): while pos+len(T)using namespace std;void getNext(const char* T,...
分类:
编程语言 时间:
2015-08-27 14:53:21
阅读次数:
153
问题描述:设置一个起始位置,寻找主串中第一次出现子串的首位置。
算法实现:
int index(string str,string substr,int pos)
{
int i=0,j=0;
int slen,sslen;
i=pos;
slen=str.length();
sslen=substr.length();
while(i+sslen<slen)
{
whi...
分类:
编程语言 时间:
2015-08-26 22:33:43
阅读次数:
309
题意是问所有前缀出现的次数和,mod10007;想一想next数组代表什么意思,是从当前失配位置走到上一个匹配位置的后面,next[i]的值说明以当前位置为结尾,长度为next[i]的后缀,与以开头元素为起始,长度为next【i】的前缀是相同的,那么方法就很容易了,对于每个j = i,沿着next【...
分类:
编程语言 时间:
2015-08-26 10:40:43
阅读次数:
180
网上关于KMP的讲解已经够多了,但我感觉很多的文章对于一些关键点的解释还不够清晰,如果你还不知道KMP算法,那建议你先百度了解一番KMP,如果了解完后感觉大脑还是塞塞的,思路不够清晰的话再来看看我这篇文章。这里就不再对KMP从头到尾讲述了。毫无疑问,KMP的关键点就是求next数组,我只针对如下两点做解释以及给与数学证明。
针对字符串str求它的next数组:
1 next[i]的意义:
n...
分类:
其他好文 时间:
2015-08-25 21:40:25
阅读次数:
186
KMP算法假定了解案件的原则,其实很easy。KMP算法简述关于根据自己的理解在这里。KMP三位发明者(Knuth、Morris、Pratt)的首字母组成,又称字符串查找算法。个人认为能够理解为最小回溯算法,即匹配失效的时候,尽量少回溯。从而缩短时间复杂度。KMP算法有两个关键的地方,1)求解nex...
分类:
编程语言 时间:
2015-08-25 18:22:57
阅读次数:
155
KMP算法是经典的字符串匹配算法,解决从字符串S,查找模式字符串M的问题。算法名称来源于发明者Knuth,Morris,Pratt。 假定从字符串S中查找M,S的长度ls,M的长度lm,且(ls > lm)。 朴素的字符串查找方法 ??...
分类:
编程语言 时间:
2015-08-25 12:58:06
阅读次数:
119
KMP算法
【题目】
给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有字串match,则返回match在str中的开始位置,不含有则返回-1。
【举例】
str=“acbc”,match=“bc”。返回2。
str=“acbc”,match=“bcc”。返回-1。
【要求】
如果match的长度大于str长度(M>N),str必然...
分类:
编程语言 时间:
2015-08-21 23:25:30
阅读次数:
232
KMP
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普
拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目
的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。
接下来我们先分析三张图,S代表主串...
分类:
编程语言 时间:
2015-08-21 21:29:17
阅读次数:
298
这么有名的串模式匹配算法,在此不作详细介绍了。如果有不了解的请看参考文献的两篇文章。 这里,我只准备介绍一下该算法核心next数组的含义(怎么求,相关博客也很详细)。很多文章介绍next数组的时候,一上来会介绍字符串前缀和后缀的概念,我这里也提一下。给定一个字符串T[0...n],其前缀有:T...
分类:
编程语言 时间:
2015-08-19 00:07:16
阅读次数:
176