KMP算法之Next数组如何计算

哈哈哈

KMP算法之Next算法之如何计算

简的描述

K,J为两个“指针”,K指向前缀,J指向后缀。
当P[K]==P[J],则 K++,J++,匹配下一个字符
当P[K]!=P[J],则K=next[K],进行回溯

抛出疑问

为啥回溯K呢???

因为从左到右,前缀是固定的,后缀会随J++发生巨大的变化

next是怎么定义的??

例如next[K],指的是下标为K个字符前的最长相同前后缀的长度。有点拗口,但是看过KMP算法的原理应该懂这是啥。

所以看懂下面的图

本来想录视频滴,实在太害羞就没录

《KMP算法之Next数组如何计算》
《KMP算法之Next数组如何计算》《KMP算法之Next数组如何计算》

《KMP算法之Next数组如何计算》

最简单的实现

void getNext(string &p,int next[]){ 
	int k=-1,j=0;//初始化
	next[0]=-1;
	while(j < p.length() - 1){ 
		if(k == -1 || p[k] == p[j]){ //匹配下一个
			k++;j++;
			next[j]=k;
		}else k = next[k];//回溯
	}
}

当然这不是最完善的版本,还有改善的空间,我还没看透…
所以等我看透了再发。

    原文作者:Chauncy.
    原文地址: https://blog.csdn.net/shipsail/article/details/102723116
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞