1. KMP
1.1 目的
1.2 过程
寻找前后缀最长匹配:
k=3时前缀和后缀最大匹配程度
对较短的str2中的每个字符都需要求k,求的是每个字符之前的字符串的最长前缀和后缀匹配
0位置和1位置默认-1和0
当str1走到x,str2走到y时发现不匹配,查看y之前的最大前后缀匹配,str2推到最大后缀处和str1重新比较
若前后缀没有可以匹配的,直接把str2推到x位置开始重新比较
1.3 代码
next[i2]==-1代表i2此时在0位置,只有这里是-1
cn既代表哪个位置和i-1比,也代表当前信息
2. Manacher算法
2.1 目的
2.2 原理
加的间隔符可以是任意符号,不一定是原串中没有出现过的
伪代码:
时间复杂度从O(N^2)变成O(N)
2.3 代码
- 2*C-i是i’的位置
- 这句代码表示至少不用验证一定是回文的区域
- 上下界都没有超过字符串数组