字符串匹配的KMP算法 — 阮一峰
明白KMP算法的原理后我们思考如何求出给定字符串的部分匹配值数组next
,我们当然不可能每次都把所有前后缀写出来,那么我们要思考的就是如果我知道next[0]
~next[i-1]
的值,能不能求出next[i]
? 答案是肯定的。
我们以字符串ACCCBAAACCCBAAC
为例,依次求出next[i]
的值:
Java代码实现:
1 | public static int[] getNext(String s) { |
来看一道leetcode1392题,运用KMP算法可以简单的解决,我们只需要对上面的代码做简单的修改:
1 | public String longestPrefix(String s) { |
OK,那么既然next
数组已经求出来了,我们就可以回到我们最初的命题:举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?
1 | //返回第一次匹配的索引 |