KMP算法next[ ]如何计算

代码模板

void get_next(string t, int next[]) {
    
    
	int i = 1, j = 0;
	next[1] = 0;
	while (i<=t.length())
	{
    
    
		if (j == 0 || t[i] == t[j]) {
    
    
		//next[++i]=++j;
			++i;
			++j;
			next[i] = j;
		}
		else {
    
    
			j = next[j];
		}
	}
}

参考地址

https://www.bilibili.com/video/BV16X4y137qw?from=search&seid=10416618682341157297&spm_id_from=333.337.0.0

KMP算法简化(看门牌算法)

在这里插入图片描述

原理

我认为next[ ]数组最精辟之处就在下面两句话中:

  • next[j+1]的最大值就是next[j]+1
  • 如果Pk1!=Pj,那么next[j+1]可能的次大值就是next[next[j]]+1,按照这条公式可以更加高效的求出next[j+1]。
    在这里插入图片描述

原理图

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

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121378786