数据结构 顺序串的各种模式匹配算法

如图效果:

数据结构 顺序串的各种模式匹配算法_第1张图片

#include 
#include
#include
using namespace std;
#define MaxSize 100
int next[MaxSize],nextval[MaxSize];
typedef struct
{
    char data[MaxSize];
    int length;
} SqString;
void StrAssign(SqString &s,char cstr[])
{
    int i;
    for(i=0; cstr[i]!='\0'; i++)
        s.data[i]=cstr[i];
    s.length=i;
}
void DispStr(SqString s)
{
    int i;
    for(i=0; i=t.length)
            return (i-t.length);
        else
            return -1;
}
///KMP算法中求t串的next值
void getnext(SqString t,int next[])
{
    int i=0,j=-1;
    next[0]=-1;
    while(i=t.length)
        return i-t.length;
    else
        return -1;
}
///改进后KMP算法中求t串的next值
void getnextval(SqString t,int next[])
{
    int i=0,j=-1;
    next[0]=-1;
    while(i=t.length)
        return i-t.length;
    else
        return -1;
}
int main()
{
    int j;
    SqString s,t;
    StrAssign(s,"abcabcdabcdeabcdefabcdefg");
    StrAssign(t,"abcdeabcdefab");
    printf("串s:");
    DispStr(s);
    printf("\n");
    printf("串t:");
    DispStr(t);
    printf("\n");
    printf("t串在s串中的位置=%d\n",BFIndex(s,t));
    getnext(t,next);///求next值
    getnextval(t,nextval);///求nextval值
    printf("j      ");
    for(j=0;j

哈哈,好高兴,终于理解了KMP

BF可以直接返回模式串在主串中的位置,简单易懂但是效率太低

KMP先求t串的next值,然后通过KMPIndex()调用getnext()函数返回匹配位置

改进后的KMP与KMP只是next取值时有所不同,也是通过KMPIndex1()调用getnextval()返回匹配位置


你可能感兴趣的:(kmp)