KMP

来源:互联网 发布:杭电网络教育 编辑:程序博客网 时间:2024/06/12 19:52
#include<stdio.h>#include<string.h>int next[100];char S[100],T[100];void getnext(char* T,int m){    int k,j;    next[0]=-1;    k=-1; j=0;    while( j < m )    {        if( k==-1 || T[k]==T[j] )        {            j++; k++; next[j]=k;        }        else            k=next[k];    }}int KMP(char* S,char* T,int n,int m){    int i,j;    i=0; j=0;    while( i<n && j<m )    {        if( j==-1 || S[i]==T[j] )        {            i++;  j++;        }        else        {            j=next[j];        }    }    if( j>=m ) return i-m+1;    else return -1;}int main(){    while(~scanf("%s%s",S,T)){        getnext(T,strlen(T));        int ans=KMP( S,T,strlen(S),strlen(T) );        printf("%d\n",ans);    }    return 0;}

原创粉丝点击