如何求字符串next数组值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何求字符串next数组值相关的知识,希望对你有一定的参考价值。

求字符串next数组值:

已知String str = "aaab"; 其Next数组值结果为  0123。

已知String str = "babab"; 其Next数组值结果为  01123。

计算过程:

计算3b (3b表示坐标为3的b):先比较3b的前一位2a,2a的NEXT值为1,将2a和坐标为1的串1b比较,不相等,因为1b是第一位,所以最终3b的NEXT值为1。

计算4a:先比较4a的前一位3b,3b的NEXT值为1,将3b和坐标为1的串1b比较,相等,所以最终4a的NEXT值为(3b的NEXT值 + 1)= 2。

计算5b:同理计算4a,可得计算结果为2+1=3。

扩展资料

next的优点

KMP算法优于简单字符串匹配算法的根本原因就是:引入了一个next数组,这个数组可以尽可能的记录相关的匹配信息,使得在不匹配发生的时候移动的步长不再是固定的一位,加快了匹配进行的速度。

在失配后,并不简单地从目标串下一个字符开始新一轮的检测,而是依据在检测之前得到的有用信息即next数组中记录的信息,直接跳过不必要的检测,从而达到一个较高的检测效率,关于它的讲解、实现和优化网上。

参考资料来源:百度百科—kmp算法

参考技术A next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。 参考技术B

    next[1]=0,next[2]=1;

    后面求解每一位的next值时,根据j的前一位进行比较,令k=next[j-1];

    比较s[j-1]与s[k],若相等,则next[j]=k+1;若不相等,令k=next[k],若k!=0,重复3步骤,直到next[k]=0,next[j]=1.

参考技术C 没看懂

以上是关于如何求字符串next数组值的主要内容,如果未能解决你的问题,请参考以下文章

KMP算法求next数组

字符串匹配KMP算法中Next[]数组和Nextval[]数组求法

字符串匹配KMP算法中Next[]数组和Nextval[]数组求法

kmp算法求next数组

前缀数组

KMP算法中的next数组如何计算