KMP算法的next和nextval值計算
先看看next數據值的求解方法
例:下標從1開始(若題中給定下標為0開始,把所有值-1即可)
next數組的求解方法:根據前一個字符next,一直循環找到第一次匹配成功的下標,並把next=1;如果當前字符與下標1字符都不相同,next值就為1(初始下標值)
第一位為0,第二位為1,
第三位:把前一個模式串字符b與下標next值所對應的字符比較,b 和a不同,next為1(初始下標值)
第四位:前一個,c c和a不同,next為1
第五位:a和a相同(下標為1)1+1=2
第六位:b和b相同(下標為2)2+1=3
第七位:a和c不同(下標為3),繼續找,c下標為1,a和a相同(下標為1) 1+1=2
nextval數組求解方法:根據next數組的值作為下標找到第一個不同的字符,把它的下標作為nextval的值;否則繼續循環比較,直到與第一個字符也相同,此時,nextval值為0
第一位為0,第二位為1,
第三位:(當前下標字符)c與a(next值1作為下標的字符進行比較),若不同則為初始下標值1
第四位: a和a相同(第一個字符),nextval值為0
第五位:b和b(下標為2),相同,繼續比較,b的next為1,b和下標為1的比,即b和a比,不同,則nextval值為1
第六位:a和c(下標為3),不同,nextval為下標的值 3
第七位:a和b(下標為2),不同,nextval為下標的值 2
注:如果下標從0開始,只需把所有的next和nextval值-1就是