#include <stdio.h>
#include <string.h>
void get_next(char T[], int next[]) {
int i = 1, j = 3, k;
next[1] = 0;
next[2] = 1;
while(j <= T[0]) {
k = next[j-1];
while(next[k] != 0) {
if(T[j-1] == T[k]) {
next[j] = k + 1;
break;
}
else {
k = next[k];
}
}
if(next[k] == 0)
next[j] = 1;
++j;
}
}
int Index_KMP(char S[], char T[], int pos) {
int next[255];
int i = pos;
int j = 1;
get_next(T, next);
while(i <= S[0] && j <= T[0]) {
if(j == 0 || S[i] == T[j]) {
++i;
++j;
}
else {
j = next[j];
}
}
if(j > T[0])
return i - T[0];
else
return 0;
}
int main() {
char S[128], T[128]; //S[0]、T[0]最大为127
while(EOF != scanf("%s %s", &S[1], &T[1])) {
S[0] = strlen(&S[1]);
T[0] = strlen(&T[1]);
printf("%d\n", Index_KMP(S, T, 1));
}
return 0;
}
KMP
最新推荐文章于 2024-10-12 17:27:27 发布