KMP
- kmp算法是在已知串的next上执行的
- (如果代码看不懂的话,可以私聊我,不一定能及时回复)
next表

KMP代码
#include<stdio.h>
#include<string.h>
void get_next(char *T, int next[]) {
int strs_len = strlen(T);
int i = 0, j = -1;
next[0]=-1;
while (i < strs_len) {
if (j == -1 || T[i] == T[j]) {
i++;
j++;
next[i] = j;
} else {
j=next[j];
}
}
}
int kmp(char *str_main,char * str_branch){
int next[100];
int str_main_len = strlen(str_main);
int str_branch_len = strlen(str_branch);
int i,j;
get_next(str_branch,next);
i=0;
j=0;
while ( i < str_main_len && j < str_branch_len )
{
if(str_main[i]==str_branch[j]){
i++;
j++;
}else{
j = next[j];
if(j==-1){
j++;
i++;
}
}
}
if(j>=str_branch_len){
return i-str_branch_len;
}else{
return -1;
}
}
int main() {
printf("KMP算法的实现\n");
char str_main[100];
char str_branch[100];
printf("请输入主串:\n");
scanf("%s",str_main);
printf("请输入所查找的子串:\n");
scanf("%s",str_branch);
printf("子串在主串中开头位置为:%d\n",kmp(str_main,str_branch));
return 0;
}
代码效果
