例:
求模式串abaabcac 的next值与nextval值?
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
模式串 | a | b | a | a | b | c | a | c |
next | 0 | 1 | 1 | 2 | 2 | 3 | 1 | 2 |
nextval | 0 | 1 | 0 | 2 | 1 | 3 | 0 | 2 |
解析
next:
- 前两位必定为0和1。
- 计算第三位的时候,看第二位b的next值,为1,则把b和1对应的a进行比较,不同,则第三位a的next的值为1,因为一直比到最前一位,都没有发生比较相同的现象。
- 计算第四位的时候,看第三位a的next值,为1,则把a和1对应的a进行比较,相同,则第四位a的next的值为第三位a的next值+1=2 ,因为是在第三位实现了其next值对应的值与第三位的值相同。
- 计算第五位的时候,看第四位a的next值,为2,则把a和2对应的b进行比较,不同,则再将b对应的next值1对应的a与第四位的a进行比较,相同,则第五位的next值为第二位b的next值+1=2。因为是在第二位实现了其next值对应的值与第四位的值相同。
- 计算第六位的时候,看第五位b的next值,为2,则把b和2对应的b进行比较,相同,则第六位c的next值为第五位b的next值加上1,为3,因为是在第五位实现了其next值对应的值与第五位相同。
- 计算第七位的时候,看第六位c的next值,为3,则把c和3对应的a进行比较,不同,则再把第3位a的next值1对应的a与第六位c比较,仍然不同,则第七位的next值为1。
- 计算第八位的时候,看第七位a的next值,为1,则把a和1对应的a进行比较,相同,则第八位c的next值为第七位a的next值加上1,为2,因为是在第七位和实现了其next值对应的值与第七位相同。
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
模式串 | a | b | a | a | b | c | a | c |
next | 0 | 1 | 1 | 2 | 2 | 3 | 1 | 2 |
nextval | 0 | 1 | 0 | 2 | 1 | 3 | 0 | 2 |
nextval :
- 第一位必为0,第2位b对应next值1,b与索引1对应的a比较,不相等,则第二位b的nextval值为为自身的next值1
- 第3位a对应next值1,a与索引1对应的a比较,相等,则第三位a的nextval值为索引1对应的nextval值0
- 第4位a对应next值2,a与索引2对应的b比较,不相等,则第四位a的nextval值为自身的next值2
- 第5位b对应next值2,b与索引2对应的b比较,相等,则第五位b的nextval值为索引2对应的nextval值1
- 第6位c对应next值3,c与索引3对应的a比较,不相等,则第六位c的nextval值为为自身的next值3