首页 > 代码库 > 字符串匹配KMP next数组的理解
字符串匹配KMP next数组的理解
#include<cstdio>#include<cstring>void getNext(int *Next,char* src){ int i,j; Next[0]=-1; i=0; j=-1; int N=strlen(src); while(i<N-1){ if(j==-1||src[i]==src[j]){ ++i; ++j; Next[i]=j; }else{ /* 理解难点:假设已经存在Next;假设是两个字符串在进行比较。 1. a)现在有两个字符串 src (传入的完整字符串,长度为 N ) 和 dest(不完全字符串,从第i个位置到末尾,长度为 N-i ) 进行比较, b)Next数组已经存在, 2. 若 src 从0到第j-1个位置,与dest相同, 但是 src 在第j个位置 与字符串 dest 不相同, 3. 则 src 该回溯到Next[j]的位置重新进行比较 */ j=Next[j]; } }}int KMPMatch(char *father,char *son){ int i,j; i=0; j=0; int next[15]; getNext(next,son); while(i<strlen(father)){ if(j==-1||father[i]==son[j]){ ++i; ++j; }else{ j=next[j]; } //src的游标j到达strlen(src),说明dest中存在src子串 if(j==strlen(son) ) return i-strlen(son); } return -1;}int main(){ char dest[]="ABC ABCABD ABC ABD"; char src[]="ABC ABD"; int res=KMPMatch(dest,src); printf("%d\n",res); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。