KMP算法——next数组预处理
·
1.首先定模式串前两个的next值——0和1;
![]()

【注意】规定索引 i 从1开始;
2. 求next[i] ,i≥3:
(1)令 j=nexti-1,j为待比较下标;待比较字符:模式串上一位字符 Ti-1,对比字符:Tj;
(2)循环回退:当 j≠0 且 Ti-1≠Tj,执行 j=nextj;
(3)若 Ti-1==Tj:nexti=j+1;
(4)若回退至 j=0:nexti=1;
3.具体示例:以模式串abaabcac为例
(1)初始状态:索引1对应字符next[1]=0,

(2)索引2对应字符的next[2]=1;

(3)计算next[3]

①
,![]()
②
,![]()
③
,执行回退![]()
④
,循环终止,![]()
(4)计算next[4]

①
,![]()
② 对比
,![]()
③ 两字符相等,![]()
(5)计算next[5]

①
,![]()
② 对比
,
;
,回退![]()
③ 对比
,
;字符相等
④ ![]()
(6)计算next[6]

①
,![]()
② 对比
,
;字符相等
③ ![]()
(7)计算 next[7]

①
,![]()
② 对比
,
;
,回退 ![]()
③ 对比
,
;
,回退![]()
④
,循环终止,![]()
(8)计算next[8]
①
,![]()
② 对比
,
;字符相等
③ ![]()
更多推荐




所有评论(0)