昨天看到网易的笔试题有一道kmp算法,就复习了一遍
kmp算法主要针对的是模式串匹配问题,主要分为两个步骤
一、求解next数组
所谓的next数组,指的是当主串(在下标i)和模式串(在下标j)上的元素不匹配时,模式串下标j要回退的位置,记为k
每一个j,都对应一个回退的位置k,所以在求模式串的匹配问题时,我们首先要根据模式串初始化一个next数组
具体求解可参考http://www.cnblogs.com/tangzhengyue/p/4315393.html
特别注意失配问题,当模式串p[j+1]位置的字符和回退的p[next[j+1]]位置的字符相等时,匹配仍然不成功,需要继续往后回退
即 next[j+1]回退到 next[next[j+1]]位置
二、求解当前的主串是否和模式串匹配
当主串(在下标i)和模式串(在下标j)上的元素匹配时,主串和模式串都遍历到下一个元素进行匹配,当不匹配时,模式串回退到next[j]位置,当循环遍历完,判断模式串的下标是否到达模式串的尾部。
本文深入讲解了KMP算法的核心概念及应用,包括next数组的计算方法及其在模式串匹配问题中的作用,通过实例帮助理解算法流程。
10万+

被折叠的 条评论
为什么被折叠?



