解决问题
在已知“母串”(长度为n)中寻找“子串”(长度为m)。
与在给定集合中寻找特定子集类似,但不同。
思路
- 暴力搜索(类似滑动匹配):思路简单,网上很多讲解,不赘述。时间复杂度为O(n * m)
- KMP模式匹配:充分利用“子串”特性,时间复杂度为O(n + m)
一句话概括
发生匹配失败时,子串滑动至“已匹配成功串”的“最长公共后缀”位置。
算法解释
在c处发生匹配失败,所以“已匹配成功串“为"beabe",最长公共前后缀为"be"
子串“滑动”至“最长公共后缀”位置
(图出自 https://blog.csdn.net/fx677588/article/details/53406327,有改动)
代码实现技巧
- 先计算子串的每个“最长公共前后缀”,也就是大部分教程提到的next数组