天天看点

KMP算法的next求解

题目:

        在字符串的KMP模式匹配算法中,需要求解模式串p的next函数值,其定义如下所示。若模式串p为"aaabaaa",则其next函数值为0123123。

KMP算法的next求解

 解析:

        当j=1时    next[1]=0;

        当j=2时    找不到k    next[2]=1;

        当j=3时    k=2    p1=p2    a=a    next[3]=2;

        当j=4时    k=2,3

                        当k=2时    p1=p3    a=a    2成立;

                        当k=3时    p1p2=p2p3    aa=aa    3成立;

                        next[4]=3;

        当j=5时    k=2,3,4

                        当k=2时    p1!=p4    a!=b    2不成立;

                        当k=3时    p1p2!=p3p4    aa!=ab    3不成立;

                        当k=4时    p1p2p3!=p2p3p4    aaa!=aab    4不成立;

                        next[5]=1;

        当j=6时    k=2,3,4,5

                        当k=2时    p1=p5    a=a    2成立;

                        当k=3时    p1p2!=p4p5    aa!=ba    3不成立;

                        当k=4时    p1p2p3!=p3p4p5    aaa!=aba    4不成立;

                        当k=5时    p1p2p3p4!=p2p3p4p5    aaab!=aaba    5不成立;

                        next[6]=2;

        当j=7时    k=2,3,4,5,6

                        当k=2时    p1=p6    a=a    2成立;

                        当k=3时    p1p2=p5p6    aa=aa    3成立;

                        当k=4时    p1p2p3!=p4p5p6    aaa!=baa    4不成立;

                        当k=5时    p1p2p3p4!=p3p4p5p6    aaab!=abaa    5不成立;

                        当k=6时    p1p2p3p4p5!=p2p3p4p5p6    aaaba!=aabaa    6不成立;

                        next[7]=3;

        next的函数值为0123123。

继续阅读