KMP算法解决什么问题?示例
1。 KMP算法解决什么问题?
KMP 解决了使用线性复杂度来查找主字符串中模式字符串第一次出现的下标的问题。
如果使用标准方法,即找到两个循环,时间复杂度为O(M*N)。 M是主串的长度,N是模式串的长度。
【示例】
使用 KMP 算法,可以使用 O(N) 的时间复杂度在大字符串 @ abcdef@abga 中查找模式字符串“abga”。
2。您需要了解哪些部分才能获得 KMP?
- 后缀与后缀
- next[N]next[N]
- next[N]next[N]重复方法
- 移动[N]指针next next字符串指针对应主绳
3. 分离说明
1.前缀和后缀的含义,后面的[N]个数字的含义
[示例]
字符串长度 str="babdefbab" 前缀和后缀如表1所示。 abdefbab
babdefbabba ♸♶‶♸♶ es 和相同长度的后缀相同:b、bab 、babdefbab。
正确的后缀和相同长度的正确后缀是 b 和 bab。其中,最长的正确后缀是bab。
【概念】
根据上面的例子,我们可以得出关于后缀和后缀的结论 - 后缀指的是字符串头。正确的前缀表示不包含字符串本身的标头。字符串的实际后缀长度小于字符串的长度。
- 后缀表示字符串的结尾。字符串的实际后缀长度小于字符串的长度。
2。 [N] next [N] 数组的含义
【概念】
next[i]next[i] 表示 strstr 中下标从 00 到 i-1i−1 的子串 最长等效实数后缀的长度和后缀。 next[i]next[i]的编号为[-1,N-1]$。
【示例】 仍然使用字符串 str="babdefbab" 例如
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| next[i] | -13。 next [N]next[N] 数组 查找方式
4。按照 [N] next [N] next 的顺序移动指向模式串的指针,以匹配主串 |
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网