KMP算法中的函數值只和模式串有關,而和相匹配的主串無關。
例 主串:a c a b a a b a a b c a c a a b c
模式串:a b a a b c a c
1.首先,我們給模式串標上序號
2.之後,我們把模式串的所有前綴依次列出來(雖然前綴不能爲串本身,但在這裏我麼也將其列在最後面)
3.接下來,我們要求得每一個子串中相等的前綴與後綴的最大長度
我們拿第五個子串作爲例子
可以看出,這條子串有相同的前綴後綴:ab 長度爲2
123步示意圖
4.這樣,我們就得到了一組序列,但是這並不是我們要的next數列,我們暫且把它叫做maxL數列
5.接下來我們將maxL數列複製一行,去掉最後一個值,在開頭加上一個-1,往右平移一格,每個值+1,這就是我們想要的next數列
6.接下來來看nextVal數列
- 首先,第一個值填爲0;
- 序號依次檢查maxL值和next值是否相等,若不相等,填入對應的next值;
- 若相等,填入對應序號爲next值得nextVal值
7.這樣,我們就得到了nextVal數列。