KMP算法:
給定一個主串S及一個模式串P,判斷模式串是否為主串的子串;若是,返回匹配的第一個元素的位置(序號從1開始),否則返回0;
這里先不寫算法,僅僅計算next和nextVal值
那么計算時只用到子串,也就是模式串
這里模式串為:abaabcac
第一步將模式串寫上序號,我們這里從1開始(有的從0開始,建議充1開始)
然后計算出maxL值,列出從第一個開始的子串,找出相等的前綴和后綴的個數
如果2>看不懂的話,看3>,
2>計算maxL值
所以maxL值
如果這個看不懂的話, 看下面的3>
3>, 如果2>看懂了這個就不用看了
依次類推
4>計算next值
接下來將maxL復制一行,去掉最后一個數,在開頭添加一個-1,向右平移一個格,然后每個值在加1的到next值
5>計算nextVal值,首先將第一個為0,然后看next和maxL是否相等(先計算不相等的)
當next和maxL不相等時,將next的值填入
當next和maxL相等時,填入對應序號為next值得nextVal值
所以整個nextVal值為: