KMP字符串查找算法

来源:互联网 发布:js 集合 编辑:程序博客网 时间:2024/06/05 09:25
#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;elsenext[i]=next[j];}elsej=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++;elsej=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;}

原创粉丝点击