#include<stdio.h>
#include<stdlib.h>
int nextval(char t[],int next[]) {
next[0] = 0;
next[1] = 0; int i = 1;
int j = 0;
while (i <=t[0]-'0') {
if (j == 0 || t[i] == t[j]) {
++i; ++j;
if (t[i] != t[j])
next[i] = j;
else
next[i] = next[j];
}
else {
j = next[j];
}
}
return 0;
}
int kmp(char s[], char t[]) {
int i = 1;
int j = 1;
int* ne = (int*)malloc(sizeof(int) * (t[0] - '0'+1));
nextval(t,ne);
for (int i = 1; i <= s[0] - '0'; ) {
if (s[i] == t[j]||j==0) {
i++;
j++;
}
else {
j = ne[j];
}
if (j == t[0] - '0'+1) {
printf("ok %d",i-j+1);
return 1;
}
}
printf("No");
return 0;
}
int main() {
char a[] = "9adfsdddfgdfghddf";
char b[] = "4dddfgh";
kmp(a, b);
return 0;
}
KMP字符
最新推荐文章于 2024-10-01 17:46:04 发布