kmp

来源:互联网 发布:新东方雅思词汇知乎 编辑:程序博客网 时间:2024/06/05 06:26

kmp看不懂啊!先放着再说!


#include<stdio.h>#include<string.h>int next[10001];void make_next(char sstr[],int ls){    next[0]=-1;    int j=0;int k=-1;    while(j<ls-1)    {        if(k==-1||sstr[j]==sstr[k])        {j++;k++;next[j]=k;}        else            k=next[k];    }}int find_substr(char mstr[],int lm,char sstr[],int ls){    int rst=-1;    make_next(sstr,ls);    int i,j,n;i=j=n=0;    while(i<lm)    {        n++;        if(mstr[i]==sstr[j]||j==-1)        {i++;j++;}        else j=next[j];        if(j==ls)        {rst=i-ls;break;}    }    return rst;}int main(){    char mstr[20];char sstr[4];    scanf("%s%s",mstr,sstr);    printf("位置在%d!\n",find_substr(mstr,strlen(mstr),sstr,strlen(sstr)));    return 1;}
1 0
原创粉丝点击