首页 > 代码库 > kmp算法
kmp算法
1 char a[100],b[100]; 2 int next[100]; 3 void get_next(char b[],int len) 4 { 5 next[0]=-1; 6 int i=0; 7 int j=-1; 8 while(i<len) 9 {10 if (j==-1||b[i]==b[j])11 {12 i++;j++;13 next[i]=j;14 }15 else16 {17 j=next[j];18 }19 }20 }21 int kmpmatch(char a[],char b[])22 {23 int alen=strlen(a);24 int blen=strlen(b);25 if(blen>alen)26 return -1;27 get_next(b,blen);28 int i=0,j=0;29 while(i<alen)30 {31 if (j==-1||a[i]==b[j])32 {33 i++;j++;34 }35 else{36 j=next[j];37 }38 if (j==blen)39 {40 return i-j;41 }42 }43 return -1;44 }
注意 next[0]=-1; 不可用 next[1]=0; 这个是约定的
next[j]=k 代表j 前面 有k个字符串 与开头的字符串的k个是相同的 因为从0开始 所以 接下来比较第k个字符 是否一致,
kmp算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。