KMP算法最难懂的就是next[]数组的求法. 用一个例子来解释,下面是一个子串的next数组的值,可以看到这个子串的对称程度很高,所以next值都比较大. 位置i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 前缀next[i] 0 0 0 0 1 2 3 1 2 3 4 5 6 7 4 0 子串 a g c t a g c a g c t a g c t g 申明一下:下面说的对称不是中心对称,而是中心字符块对称,比如不是abccba,而是abcabc这种对称.
在KMP算法中,最关键的就是求解next数组了.那么如何快速求解next数组呢? 已知模式串:A B C D A B D D A 其next数组:0 0 0 0 1 2 0 0 1 那么是如何求证出来的呢? 首先字符串从左至右遍历. 第一个字符A的next数组对应元素为0, 第一个字符A和第2个字符B比,不相等.B:0(表示字符B的next数组对应元素为0): 第一个字符A和第3个字符C比,不相等.C:0 第一个字符A和第4个字符D比,不相等.D:0 第一个字符A和第5个字符A比, 相等