第一位的next的值是0,第二位的next的值为1(固定),后面求解每一位的next的值时。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容与前一位进行比较(向前继续寻找next值对应的内容与next值对应的内容的next前一位进行比较),直到找到某个位上的内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。所以中心思想则是递进查看前一位的next对应的是否和前一位相同。找到相同的则在找到的基础上加1。
例:给出一个模式串S=‘aabaabaab'
1、第一位的next值为0,第二位的next值为1
2、接下来求第三位b,前一位a的next值为1,找到1号下标的值为a。a与a相同则在前一位a的next值上加1;
3、接下来看第四位a,前一位b的next值为2,找到2号下标的数为a,a与b不同,则向前继续寻找,即刚才2号下标a的next值为1,1号下标的值为a,a与b不同,同理继续向下寻找,但此时a的next值为0,所以第四位的next值为1;
4、接下看第五位a,前一位a的next值为1,找到下标为1的数为a,a与a相同,next值加1;
5、接下来看第六位b,前一位a的next值为2,找到2号下标的值为a,a和a相同,next值加1;
6、接下来看第七位a,前一位b的next值为3,找到3号下标的值为b,b和b相同,next值加1;
7、接下来看第八位a,前一位b的next值为4,找到4号下标的值为b,a和a相同,next值加1;
8、接下来看第九b,前一位a的next值为5,找到5号下标的值为a,a和a相同,next值加1;
next值:012123456
要根据已经求解出的next值,若第一与第二下标的数据相同,则第一位与第二位的nextval值为0、0;不相同,则第一位与第二位的nextval值为0、1;从第三位开始将自身的值与其next值所指向的下标的值比较。若相同则该位的nextval为刚刚比较的值的next值;若不相同则保留自身的next值作为nextval值。
1、第一与第二位下标的数据相同,第一位与第二位的nextval值为0、0
2、第三位b的next值为2,下标为2的数为a,b与a不同,第三位的nextval值为2。
3、第四位a的next值为1,下标为1的数为a,a与a相同,第四位的nextval值为0。
4、第五位a的next值为2,下标为2的数为a,a与a相同,第五位的nextval值为1。
5、第六位b的next值为3,下标为3的数为b,b与b相同,第l六位的nextval值为2。
6、第七位a的next值为4,下标为4的数为a,a与a相同,第七位的nextval值为1。
7、第八位a的next值为5,下标为5的数为a,a与a相同,第八位的nextval值为2。
8、第九位b的next值为6,下标为6的数为b,b与b相同,第九位的nextval值为3。
nextval值:002012123