[C算法]006-KMP算法
求 next 数组(未优化)
按照 next 数组访问字符串下标的做法求 next 数组
以 a b a a b c 为例,next[] 数组下标从 1 开始
首先,next 数组以 0 1 开头,i 是当比较的下标,j 是待匹配下标。
next={0,1},求next[3],i=2,j=next[i],就是j=1i=2,j=1,对比 ,匹配失败 ❌- 然后
j=next[j],就是j=0 - 触发
j=0,直接next[3]=1。
next={0,1,1},求next[4],i=3,j=next[i],就是j=1i=3,j=1,对比 ,匹配成功 ✅,所以next[4]=j+1,就是2。
next={0,1,1,2},求next[5],i=4,j=next[i],就是j=2i=4,j=2,对比 匹配失败 ❌- 然后
j=next[j],就是j=1。 - 然后再对比
p_4(a)==p_1(a)匹配成功 ✅,所以next[5]=j+1,就是2。
next={0,1,1,2,2},求next[6],i=5,j=next[i],就是j=2i=5,j=2,对比 ,匹配成功 ✅,所以next[6]=j+1就是3。
next={0,1,1,2,2,3}计算完毕。
对应代码如下:
1 |
|
这是为数不多的让我感觉困惑的算法了,确实很有难度,逻辑很绕,多品味几次还是能搞懂的。
- 标题: [C算法]006-KMP算法
- 作者: Lucas
- 创建于 : 2026-03-26 15:55:48
- 更新于 : 2026-03-30 08:55:42
- 链接: https://darkflamemasterdev.github.io/2026/03/26/C算法-006-KMP算法/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论