在这里,不再对大名鼎鼎的KMP算法做过多赘述,如想了解可参考http://blog.csdn.net/v_JULY_v/article/details/6111565,写的很好!
首先,阐明一下这篇文章的目的:快速求解模式串的next以及nextval数组。当然这里面的模式串都比较短,在笔试或者面试的时候很有可能遇到,因此,如何快速求得是至关重要的!
废话不多说,我们直接切入主题,即关于next数组是如何求解的。而nextval数组是对next数组的改进,有这么个循序渐进的过程,所以先从next数组说起。我们都知道:next数组是表征模式串p自身的匹配程度的,所以我们先从一个串的前缀和后缀表达式说起。
串 |
前缀 |
后缀 |
最大长度 |
a |
无 |
无 |
0 |
aa |
a |
a |
1 |
ab |
a |
b |
0 |
aba |
a,ab |
a,ba |
1 |
abab |
a,ab,aba |
b,ab,bab |
2 |
ababa |
a,ab,aba,abab |
a,ba,aba,baba |
3 |
ababab |
a,ab,aba,abab,ababa |