#include<iostream> #include<stdio.h> #include<string.h> using namespace std; char s[50][100]; char t[10000],name[1000]; int next[50005]; void getnext(char s[])//把副串弄进来,next { int i=0,j=-1; next[0]=-1; int len=strlen(s); while(i<len) { if(s[i]==s[j]||j==-1) { i++; j++; next[i]=j; } else j=next[j]; } } int kmp(char s[],char t[]) //注意:s串为副串,t串为主串 { int num=0,i=0,j=0; int len=strlen(s); int lenn=strlen(t); while(i<lenn&&j<len) { if(j==-1||s[j]==t[i]) { i++; j++; } else j=next[j]; } //printf("%d %d ",i,j); if(j==len) return i-j; else return 100000; }