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算法的原理应该懂这是啥。

所以看懂下面的图

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

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

最简单的实现

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];//回溯
	}
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值