KMP算法计算next值和nextVal值

匿名 (未验证) 提交于 2019-12-03 00:14:01

KMP算法:

给定一个主串S及一个模式串P,判断模式串是否为主串的子串;若是,返回匹配的第一个元素的位置(序号从1开始),否则返回0;

这里先不写算法,仅仅计算next和nextVal值

那么计算时只用到子串,也就是模式串

这里模式串为:abaabcac

第一步将模式串写上序号,我们这里从1开始(有的从0开始,建议充1开始)

 

 

 然后计算出maxL值,列出从第一个开始的子串,找出相等的前缀和后缀的个数

如果2>看不懂的话,看3>,

2>计算maxL值

 

所以maxL值

 

 

 

 

 如果这个看不懂的话, 看下面的3>

3>, 如果2>看懂了这个就不用看了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 依次类推

4>计算next值

 

 

接下来将maxL复制一行,去掉最后一个数,在开头添加一个-1,向右平移一个格,然后每个值在加1的到next值

 

 

 

 

 5>计算nextVal值,首先将第一个为0,然后看next和maxL是否相等(先计算不相等的)

当next和maxL不相等时,将next的值填入

 

 

当next和maxL相等时,填入对应序号为next值得nextVal值

 

 

 

 

 

 所以整个nextVal值为:

 

 

 



 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!