该算法由D.E.Knuth ,J.H.Morris和 V.R.Pratt提出,用于解决字符串匹配问题。思想:设目标串(主串)为s,模式串为t ,并设i指针和j指针分别指示目标串和模式串中正待比较的字符,设i和j的初值均为0。若有s[i]=t[j],则i和j分别加1。否则,i不变,j退回到j=next[j-1]的位置,再比较s[i]和t[j],若相等,则i和j分别加1。否则,i不变,j再次退回到j=n...
分类:
编程语言 时间:
2015-08-27 23:14:15
阅读次数:
211
问题描述:设置一个起始位置,寻找主串中第一次出现子串的首位置。
算法实现:
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
今天把kmp的原理回顾了一下,于是做一下总结感谢该作者给出详尽的解释http://www.cnblogs.com/yjiyjige/p/3263858.html简单阐明一下原理KMP在寻找字符串匹配的过程中 保持主串的指针不动 每次匹配不成功 只对模式串进行处理“接下来我们自己来发现j的移动规律:如...
分类:
其他好文 时间:
2015-08-26 17:40:46
阅读次数:
136
一、串的基本概念
串(字符串):是由零个或多个字符组成的有限序列,一般记为:
s=‘a1a2…an’(n>=0)
s是串名,单引号括起来的是串的值,ai(1<=i<=n)可以是字母、数字或其他字符。
串中字符的数目n称为串的长度;
长度为零的串称为空串;
串中任意个连续的字符组成的子序列称为子串;
包含子串的串相应的称为主串;
字符在序列中的序号称为该字符在串中的位置;
子串在主串...
分类:
其他好文 时间:
2015-08-25 16:50:09
阅读次数:
125
KMP
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普
拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目
的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。
接下来我们先分析三张图,S代表主串...
分类:
编程语言 时间:
2015-08-21 21:29:17
阅读次数:
298
题意:统计子串出现在主串中的次数思路:典型kmp#include#include#includeusing namespace std;int next[10005];void GetNext(char t[]){//求next数组 int j,k,len; j=0; k=-1; ...
分类:
其他好文 时间:
2015-08-20 22:27:57
阅读次数:
199
题目链接:点击打开链接
题目大意:给出n个字符串主串,和m个模式串,定义f(A,B)为B串在A串中出现的次数,现在对每一个A串都计算
∑f(Ai,Bj) (1
对m个模式串建立AC自动机,然后每个主串都放入自动机中,统计主串包含多少B内的串,并输出。
注意:
标记的时候直接累加值,可能会有多个模式串相同。
统计的时候,使用fail一直要回到根。
#include
#include...
分类:
其他好文 时间:
2015-08-13 22:19:08
阅读次数:
132
KMP是一种高效的字符串查找算法,主要用于在主串中查找一个特定字串(模板)出现的位置(或是否出现)。
朴素字符串查找算法主要是通过逐次比较来实现的,在主串中找到一个位置I和字串起始字符一样时,便顺次比较后续字符。若匹配成功,则输出相应结果。若不匹配,则从位置I的下一个位置I+1开始比较。若主串长度为M,字串长度为N的最多需要比较M*N次。
KMP比较主要的改进是,充分利用已经比较的结果和字符串...
分类:
编程语言 时间:
2015-08-13 18:03:45
阅读次数:
153
题目:
写一个函数模拟c++中的strstr函数。该函数的返回值是主串中字符子串的位置以后的所有字符。请不要使用任何c程序已有的函数来完成。
#include
using namespace std;
const char* strstr1(const char* string, const char* strCharSet)
{
for (int i = ...
分类:
其他好文 时间:
2015-08-06 22:23:12
阅读次数:
218
在串的各种操作中,串的模式匹配是经常用到的一个算法。串的模式匹配也称为子串的定位操作,即查找子串在主串中出现的位置。
1.经典的模式匹配算法Brute-Force。
2.KMP算法。
#include
#include
#include
#define MAXSIZE 60
typedef struct
{
char ch[MAXSIZE];...
分类:
其他好文 时间:
2015-07-27 23:10:08
阅读次数:
124