KMP字符串查找算法

xiaoxiao2021-02-28  97

#include <stdio.h> #include <string.h> void get_next(char *t,int *next) { int i=0,j=-1; next[0]=-1; while(t[i]!='\0') { if(j==-1 || t[i]==t[j]) { i++,j++; printf("%d %d\n",i,j); if(t[i]!=t[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } int KMP(char *s,char *t,int *next) { if(s==NULL || t==NULL) return -1; int i=0,j=0; int len=strlen(t); while(s[i]!='\0') { if(j==-1 || s[i]==t[j]) i++,j++; else j=next[j]; if(j==len) return i-len; } return -1; } int main(int argc,char **argv) { char s[128]="asdfghjkabcabdkhi"; char t[64]="abcabd"; int next[64]; int n=0; get_next(t,next); for(n=0;n<6;n++) printf(" %d",next[n]); printf("s:%s\n",s); printf("t:%s\n",t); printf("%d\n",KMP(s,t,next)); return 0; }
转载请注明原文地址: https://www.6miu.com/read-43639.html

最新回复(0)