这周学习了KMP算法,只能说现在对KMP有初步的了解,并不能说真正会了,还是需要不停的学习
下面上代码:
next数组的求法
void getNext(){
int len=strlen(tar);
int i=0,j;
mynext[0]=-1;
int k=-1;
while(i<len){
if(k==-1 || tar[i]==tar[k]){
i++; k++;
mynext[i]=k;
}
else k=mynext[k];
}
}
匹配的代码
int KMP(char *s, char *p,int next[]){
int i=1,j=1;
while(i<=s[0] && j<=p[0]){
if(j==0 || s[i]==p[j]){
i++;
j++;
}
else j=next[j];
}
if(j>p[0]) return i-p[0];
else return -1;
}