KMP算法学习文档

来源:互联网 发布:淘宝客服基础培训知识 编辑:程序博客网 时间:2024/06/17 14:29
#include<iostream>#include<string>using namespace std;void getNext(const string t,int *next){    int j=0,k=-1;    next[0]=-1;    while(t[j+1]!='\0')    {        if(k==-1||t[j]==t[k])        {            j++;            k++;            if(t[j]!=t[k])            {                next[j]=k;            }            else            {                next[j]=next[k];            }        }        else        {            k=next[k];        }    }}int KMPIndex(const string s,const string t){    //int length = s.length;    int i=0,j=0;    //int     int *next = new int[t.length()];    getNext(t,next);    while(i<s.length()&&j<t.length())    {        if(j==-1 || s[i]==t[j])        {            i++;            j++;        }        else        {            j=next[j];        }    }    int length = t.length();//length()方法的返回值为无符号类型若和-1比较 -1一般大于这个数    if(j>=length)    {        return(i-t.length());    }    else    {        return -1;    }}int main(){    cout<<KMPIndex("123123456","12346")<<endl;    return 0;}
1 0