主要参考这个blog
可以发现,我们普通的过程在匹配过程中,我们假设直接暴力转移,那么上一次的暴力转移都是很浪费的,因为对于上一次的匹配的中间部分我们并没用来判断是否可以配对前面,也就是说我们最理想的情况下,每个点只判断常数次
那么我们考虑,利用上这个性质,建一个数组
我们定义这个数组的意义为对于匹配串的某一个前缀 (s) ,(s) 的前缀和后缀的最大匹配长度
这个很好预处理,原因是我们当前的转移就是基于上一个位置的,可以匹配就加一,不行就清零
关于复杂度证明就可以理解为每次操作必定移动至少一次,最终到达终点位置为匹配后面
所以是(O(n))