首页 > 代码库 > KMP
KMP
#include <stdio.h>#include <STRING.H>#include <MALLOC.H>void GetNext(int *next, char *str){ int len = strlen(str); int i, k, flag = 1; next[0] = -1; for(i = 2; i < len; i++) //next[1]一定为0 { k = next[i - 1]; flag = 1; while(k != -1 && flag == 1) //flag跳出while,k=-1为终止条件 { if(str[k] == str[i - 1]) //如果相等 { next[i] = k + 1; flag = 0; } else //如果不等 { k = next[k]; } } }}int Search(char *str1, char *str2){ int len1 = strlen(str1); int len2 = strlen(str2); int i, j; int *next = (int *)malloc(len2 * sizeof(int)); memset(next, 0, len2 * sizeof(int)); GetNext(next, str2); for(i = 0, j =0; i < len1 && j < len2;) { if(str1[i] == str2[j] || j == -1) { i++; j++; } else { j = next[j]; } } if (j == len2) { return 0; } return 1 ;}int main(){ char *str1 = "abcabe"; char *str2 = "ababa"; printf("%d", Search(str1, str2));}
KMP
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。