KMP

来源:互联网 发布:刺客信条4优化补丁 编辑:程序博客网 时间:2024/06/15 19:36
#include<stdio.h> #include<string.h>#define N 10010 void get_next(char s[], int next[]){    int j=1;    next[1]=0;    int k=0;    while(j<strlen(s+1))    {        if(k==0||s[j]==s[k])             next[++j]=++k;        else            k=next[k];    } } int index_kmp(char a[], char s[], int next[]){    int i,j;    i=1;    j=1;    while(i<=strlen(a+1)&&j<=strlen(s+1))    {        if(j==0||a[i]==s[j])        {            ++i;            ++j;        }        else            j=next[j];    }    if(j>strlen(s+1))        return i-strlen(s+1);    else        return 0;}int main(){    int next[N],i;    char a[N],s[N];    int ans;    gets(a+1);    gets(s+1);    get_next(s,next);    ans=index_kmp(a,s,next);    printf("%d\n",ans);}