导航菜单
首页 >  考研kmp算法需要理解多深  > 408数据结构

408数据结构

目录 算法思想 解题思路 关键点一步求解next数组更直接的方式划线移动法

算法思想

KMP算法,在子串(模式串)与主串的匹配过程中,可谓是淋漓尽致地体现了“能跳则跳,跳的越远越好”的思想,因为跳过的位数越多,节省的时间就越多。整个算法唯一要解决的问题,就是当字符在匹配过程中失配的时候,我们最多可以一次性跳过多少位不比较,而且不会错过正确的匹配机会。掌握这一关键的思想,解题时就会清晰很多。至于详细的算法流程,详细的教程已经很多了,下面我主要分享一下个人在写KMP的408题目时总结的的一些思路和方法。

解题思路 关键点

不管是什么样的KMP题目,肯定是逃不了要模拟算法流程的。就像上面所说,其实只要我们拿到了子串和主串,知道按照什么规则,在正确的前提下,能够在每一次失配时跳过最远,那么算法自然就跑通了。至于题目问的一些问题,比如某一次匹配开始时主串和子串指针位置,或者匹配成功时单字符的比较次数,这些就很容易看出来。

一步求解next数组

教材中next数组的推理过程分成了三步,总结成一步操作如下:

next[i] = 子串前i-1个字符序列最长相等前后缀长度+1

有了next数组后,该怎么用它来执行跳位呢?

如果在第k处匹配失败:找next[k]=n,如果n≠0,将子串指针指向第n(n从1计&

相关推荐: