#include <stdio.h> #include <string.h> #define MaxSize 255 void get_nextval(char T[], int next[]); int KMPIndex(char s[],char t[]); int main() { char S[MaxSize],T[MaxSize]; gets(S); gets(T); printf("%d/n",KMPIndex(S,T)); return 0; } void get_nextval(char T[], int next[]) { int j=0; next[0]=-1; int k=-1;//next的值 while (T[j+1]!='/0') { if (k==-1||T[j]==T[k]) { ++j; ++k; if (T[j]!=T[k]) { next[j]=k; } else next[j]=next[k]; } else k=next[k]; } } int KMPIndex(char s[],char t[]) { int nextval[MaxSize]; int i=0,j=0; get_nextval(t,nextval); int Slen = strlen(s); int Tlen = strlen(t); while (i<Slen && j<Tlen) { if (j== -1||s[i] == t[j]) { i++; j++; } else j=nextval[j]; } if (j>=Tlen) { return (i-Tlen); } else return (-1); }