先是看算法导论和数据结构
后来又自己又上YouTube看视频
然后附上代码做纪念:
int KMP(char * string, char * pattern){
int len=(int)strlen(pattern),
l=(int)strlen(string),
*next;
next=(int*)malloc((len+1)*sizeof(int));
for(int i=1,j=0;i<len;i++){
if(pattern[i]==pattern[j]) {
next[i]=j+1;
j++;
continue;
}
if(j==0) continue;
i--;
j=(next[j]==0)?0:(next[j]-1);
}
for(int i=0,j=0;i<l;i++){
if(string[i]==pattern[j]){
j++;
if(j==len) return i+1-len;
continue;
}
if(j==0) continue;
i--;
j=next[j-1];
}
return -1;
}
以后再改进吧!继续努力💪!