KMP算法详解:
- KMP算法是一种改进的字符串匹配算法
KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是一个next()函数,函数本身包含了模式串的局部匹配信息。
<部分匹配表是如何产生的>
首先了解两个概念:“前缀”和“后缀”“前缀”是指除了最后一个字符以外,一个字符串的全部头部组合;
- “后缀”是指除了第一个字符以外,一个字符串的全部尾部组合;
“部分匹配”值就是“前缀”和“后缀”的最长的共有元素的长度,以“ABCDABD”为例,
- “A”的前缀和后缀都为空集,共有元素的长度为0;
- “AB”的前缀为[A],后缀为[B],共有元素的长度为0;
- “ABC”的前缀为[A,AB],后缀为[BC,C],共有元素的长度为0;
- “ABCD”的前缀为[A,AB,ABC],后缀为[BCD,CD,D],共有元素的长度为0;
- “ABCDA”的前缀为[A,AB,ABC,ABCD],后缀为[BCDA,CDA,DA,A],共有元素为”A”,长度为1;
- “ABCDAB”的前缀为[A,AB,ABC,ABCD,ABCDA],后缀为[BCDAB,CDAB,DAB,AB,B],共有元素的长度为”AB”,长度为2
“ABCDABD”的前缀为[A,AB,ABC,ABCD,ABCDA,ABCDAB],后缀为[BCDABD],[CDABD],[DABD],[ABD],[BD],[D],共有元素的长度为0.
例如:在字符串的KMP模式匹配算法中,需先求解模式串的p的next函数值,其定义如下。若模式串p为 ”abaabaca“ ,则其 next函数值为 (B