[C算法]006-KMP算法

[C算法]006-KMP算法

Lucas Lv5

求 next 数组

按照 next 数组访问字符串下标的做法求 next 数组

a b a a b c 为例,next[] 数组下标从 1 开始
首先,next 数组以 0 1 开头,i 是当前求的下标,j 是寻找要匹配下标。

  1. next={0,1},求 next[3]i=2j=next[i],就是 j=1
    • i=2j=1,对比 p2(b)!=p1(a)p_2(b)!=p_1(a),匹配失败 ❌
    • 然后 j=next[j],就是 j=0
    • 触发 j=0,直接 next[3]=1
  2. next={0,1,1},求 next[4]i=3j=next[i],就是 j=1
    • i=3j=1,对比 p3(a)==p1(a)p_3(a)==p_1(a),匹配成功 ✅,所以 next[4]=j+1,就是 2
  3. next={0,1,1,2},求 next[5]i=4j=next[i],就是 j=2
    • i=4j=2,对比 p4(a)!=p2(b)p_4(a)!=p_2(b) 匹配失败 ❌
    • 然后 j=next[j],就是 j=1
    • 然后再对比 p_4(a)==p_1(a) 匹配成功 ✅,所以 next[5]=j+1,就是 2
  4. next={0,1,1,2,2},求 next[6]i=5j=next[5],就是 j=2
    • i=5j=2,对比 p5(b)==p2(b)p_5(b)==p_2(b),匹配成功 ✅,所以 next[6]=j+1 就是 3
  5. next={0,1,1,2,2,3} 计算完毕。
  • 标题: [C算法]006-KMP算法
  • 作者: Lucas
  • 创建于 : 2026-03-26 15:55:48
  • 更新于 : 2026-03-28 11:47:54
  • 链接: https://darkflamemasterdev.github.io/2026/03/26/C算法-006-KMP算法/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
[C算法]006-KMP算法