KMP算法字符串的匹配
KMP算法字符串的匹配
时间复杂度O(n+m)

i不用回溯(i是原串的指针)
j是子串指针
j>T[0]匹配成功,放回第一次出现位置i-T[0]
关键求next数组(只回溯j)
j=0是子串第一个位置和原串都不匹配的情况

求next数组?
固定:
next[1]=0
next[2]=1
要计算的是:其实next数组只和子串有关

答案:01123422
| next下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 字符串 | a | b | a | b | a | a | a | b |
| next数组 | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 |
如果优化这个算法:
就可以使用nextval数组
即如果T[a]=T[next[a]]
则nextval[a]=nextval[next[a]]
例如上题:
| next下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 字符串 | a | b | a | b | a | a | a | b |
| next数组 | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 |
| nextval数组 | 0 | 1 | 0 | 1 | 0 | 4 | 2 | 1 |

浙公网安备 33010602011771号