#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;
}
KMP
最新推荐文章于 2022-12-13 23:34:45 发布