KMP算法是字符串匹配算法,就是从指定字符串里找到匹配串匹配的位置

字符串匹配无非是一个个去匹配单个字符,按照通常的思路,我们只需要从头开始一个个往下比就是,但是这样的效率就太慢了

所以,我们就可以去考虑在匹配过程中,出现不匹配时,我们可以返回到哪里去进行匹配呢,是否可以不一个个匹配,而是直接跳过一些呢

显然是可以的,而KMP就是考虑这一点,其借用next数组存储每一个字符到该位置不匹配时可以返回到前面哪个位置。

这里没有图,所以或许我说的不是很清楚,这里推荐一个博主https://blog.csdn.net/starstar1992/article/details/54913261

// 构建next数组
public
static int[] getNext(char[] mode){ int[] next = new int[mode.length]; next[0] = -1; int k = -1; for (int i = 1; i < mode.length - 1; i++){ while (k > -1 && mode[k + 1] != mode[i]){ k = next[k]; } if (mode[k + 1] == mode[i]){ k++; } next[i] = k; } return next; }