求next数组和nextval数组
复习到kmp算法,查了些资料,在此记录一个相对简单的求next和nextval的方法
1.求next数组
当i<2时: next[1]=0 next[2]=1 当i>2时: 在字符串s中,s[1]~s[i-1]是长度为i-1的字符子串,这一字符子串的前缀、后缀最长公共元素的数量记为k; 则: next[i]=1+k
例:
i12345678910
字符串abcaabbcabk--00112001next0111223112
2.求nextval数组
记p = next[i] ; 将 s[i] 与 s[p] 进行比较: 1)二者相同,则,nextval[i] = next[p] 2)二者不同,则,nextval[i] = p
例:
i12345678910
字符串abcaabbcabnext0111223112nextval0110213101