KMP算法运用next数组解决匹配

    j       0  1  2  3  4  5  6  7 

   P       a  b  a  a  b  c  a  c 

next(j)-1  0  0  1  1  2  0  1 

第一趟: 

           0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16

目标    a   c   a   b   a   a   b   a   a   b   c    a     c    a    a    b    c

           O  X

模式    a   b   a   a   b   c   a   c

第一趟在posT=1,posP=1的地方失败,因为next[posP]=next[1]==0!=-1,所以下一趟posT不变,posP=next[posP]=0.

第二趟: 

       

           0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16

目标    a   c   a   b   a   a   b   a   a   b   c    a     c    a    a    b    c

               X 

模式        a  b    a   a   b   c   a   c

第二趟在posT=1,posP=0的地方失败,因为next[posP]=next[0]==-1,所以下一趟posT++,posP=0.

第三趟: 

       

           0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16

目标    a   c   a   b   a   a   b   a   a   b   c    a     c    a    a    b    c

                     O  O  O  O  O  X 

模式              a   b   a   a   b  c  a  c

第三趟在posT=7,posP=5的地方失败,因为next[posP]=next[5]==2!=-1,所以下一趟posT不变,posP=next[posP]=2.

第四趟: 

           0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16

目标    a   c   a   b   a   a   b   a   a   b   c    a     c    a    a    b    c

                                             O  O   O   O   O   O

模式                                       a   b   a   a    b     c    a    c

第四趟在posT=12,posP=7的地方成功。



猜你喜欢

转载自blog.csdn.net/LawGeorge/article/details/78995469