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。
上次做这道也错了……
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
一棵具有n个结点的二叉树,若它有m个叶子结点,则该二叉树中度为1的结点个数是多少?
小程序没有分享到朋友圈的功能,但是产品为了推广,需要曲线实现这个功能,请给出设计方案?
cookies,sessionStorage 和 localStorage 的区别?
解释一下TCP的滑动窗口。
上次做这道也错了……
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