KMP算法
具体代码
#include<stdio.h>
void GetNext(char target[],int *next,int tnum){
int j=0,k=-1;
next[0]=-1;
while(j<tnum){
if(k==-1||target[j]==target[k]){
next[++j]=++k;
}else{
k=next[k];
}
}
}
void KMP(char source[],char target[],int next[],int snum,int tnum){
int i=0,j=0;
while(i<snum&&j<tnum){
if(j==-1||source[i]==target[j]){
i++;
j++;
}else{
j=next[j];
}
}
if(j==tnum){
printf("找到了");
}else{
printf("没找到");
}
}
int main(){
int snum=9,tnum=3;
char source[snum]={'A','B','C','A','B','D','C','A','D'};
char target[tnum]={'B','C','A'};
int next[tnum];
for(int i=0;i<tnum;i++){
next[i]=0;
}
GetNext(target,next,tnum);
KMP(source,target,next,snum,tnum);
}