- 串的模式匹配:指的是子串的定位
- 主串:S 指针
i
- 模式串(子串):T 指针
j
- BF算法:S中从头开始一个一个匹配,失配后指针
i
回溯到开始匹配的下一位(从S中上次匹配开始的位置的下一位开始匹配) - 一般是O(n + m)
- 最坏是O(n * m)
- KMP算法:指针
i
不回溯 - O(n + m)
- 重点:部分匹配(已经匹配的串)
- 失配后因为
i
不回溯,所以应该找模式串中第k
个字符,下次匹配时k
与i
对齐后开始匹配,相当于模式串向右滑动至k
与i
对齐 - 找
k
:看已经匹配的串中有没有 “ 子串 ” ,这个尾部的子串和头部的子串一一对应(即,相匹配),若有,则k
为该串的下一位,k = 子串长 + 1
next
函数: