KMP(无回溯模式匹配)模板

来源:互联网 发布:mac 资料库在哪 编辑:程序博客网 时间:2024/05/14 20:58
int *get_next(char *p){    int len=strlen(p);    int *next=(int*)malloc(len*sizeof(int));    next[0]=-1;    int i,j;    for(j=1;j<len;j++)        for(i=next[j-1];;i++)        if(p[j]==p[i+1]){            next[j]=i+1;            break;        }        else if(i==-1){            next[j]=-1;            break;        }        return next;}int kmp(char *t,char *p){    int *next=get_next(p);    int i,j;    int len_t=strlen(t);    int len_p=strlen(p);    for(i=0,j=0;i<len_t&&j<len_p;){        if(t[i]==p[j]){            i++;j++;        }        else if(j==0) i++;        else j=next[j-1]+1;    }    if(j==len_p) return i-len_p;    else return -1;}
0 0
原创粉丝点击