#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
void Next(char* t,int next[]){
int i = 0;
int k = -1;//用于next[]的下标
next[0] = -1;//初始化第一位为-1
while(t[i] != '\0'){
if(k == -1 || t[i] == t[k]){
k++;i++;
next[i] = k;
}
else{
k = next[k];
}
}
}
int KMP(char* s,char *t){
int next[MaxSize];
int i = 0, j = 0;
Next(t,next);
for(int k = 0;k < MaxSize;k++){
printf("%d,",next[k]);
}
while(s[i] != '\0' && t[j] != '\0'){
if(j == -1 || s[i] == t[j]){
i++;
j++;
}
else{
j = next[j];
}
}
if(t[j] == '\0'){
return i-j;
}
else{
return -1;
}
}
int main(){
char s[] = "ababababbaaab";
char t[] = "babbaa";
int k = KMP(s,t);
printf("第一次成功匹配位置为:%d\n",k);
return 1;
}