这篇文章是对基于阶段性学习动态规划的一个实践性算法体会的记录,KMP算法,也就是大名鼎鼎的字符匹配算法,想必大家对这个字符匹配算法的目的已经很了解了,我最开始学习这个算法的时候其实也是主要是对算法中的next数组存在很多的疑惑。
首先来看next数组的作用,在此之前需要了解什么叫最长公共前后缀长度,对于一个字符串,"前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串的全部尾部组合。举例来说就是
最长公共前后缀就是这两个集合的最长公共元素。这里我们先假设已经得到了这个next数组,next[i]就表示0-i字符子串的最长公共前后缀-1(在算法实现中为了方便next[0]设为-1),那么对于目标子串tar和待匹配串sou,设遍历下标分别是j,i,如果tar[j]!=sou[i],也就是此刻发生了失配,那么就要确定下一个sou中