校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > KMP
题目

K已知串S=′aaab′,其Next数组值为()

A.0123

B.1123

C.1231

D.1211

解答

正确答案:A

next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。

首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;

如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;

如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。

C 2条回复 评论
dana

kmp有一个让人比较晕的地方是next数组有两种不一样的实现场景,值也不一样。

官方的文档是子串下标从1开始,数据结构上一般下标从0开始。所以kmp求next数组很少有填空题,主要是选择题,需要大家对答案作一下评估

我们用下标从0开始的方法,用最大公众前缀。

默认next[0] = -1

aa  最大前后缀为a,所以next[1] = 1

aaa最大前后缀为aa, next[2] = 2

aaab没有最大前后缀,next[3] = 0


也就是next数组为 -1 1 2 0 但是答案里没有。我们知道这个值指示跳到的数组下标位置。

既然没有,可以猜想是不是下标从1开始,需要对数组每位向后移一位,再+1, 移动完后为-1 0 12,增加1位为 0 123 

发表于 2018-10-08 17:18:46
0 1