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]

① ,

② 对比,;字符相等

③

Logo

一站式 AI 云服务平台

更多推荐