欢迎光临散文网 会员登陆 & 注册

KPM算法的next数组

2023-08-08 18:28 作者:龘龖龍__  | 我要投稿

要搞懂KPM算法,首先要了解next数组
那么,next数组到底是求什么的呢?
举个例子,有一个字符串”abc abd abc”(空格无意义),
要求它的最长的相同前缀后缀。

所谓前缀,就是字符串中的所有字符,末尾有一个或多个字符被切断。

“S”、“Sn”、“Sna”和“Snap”都是“Snape”的前缀

所谓后缀,就是字符串中的所有字符,开头有一个或多个字符被切断。

“agrid”、“grid”、“rid”、“id”和“d”都是“Hagrid”的后缀

那么”abc abd abc”的前缀为:

{“a ”、“ab ”、“abc ”、“abca ” 、“abcab ”、“abcabd ”、“abcabda ” 、“abcabdab ”}

后缀为:

{“ c”、 “ bc”、 “ abc”、 “ dabc”、“ bdabc”、 “ abdabc”、 “ cabdabc”、“ bcabdabc” }

相同的前缀后缀有”abc”, 最长的相同前缀后缀自然也只能是”abc”,长度为3

 

而这个字符串的next数组是什么意思呢?:
next[0],就是求a的最长相同前缀后缀,并把长度存储进next数组;
next[1],就是求ab的最长相同前缀后缀,并把长度存储进next数组;
next[2],就是求abc的最长相同前缀后缀,并把长度存储进next数组;

next[8],就是求abcabdabc的最长相同前缀后缀,并把长度存储进next数组。


KPM算法的next数组的评论 (共 条)

分享到微博请遵守国家法律