KMP算法的全名为Knuth-Morris-Pratt算法,可以快速检验字符串t是否为字符串s的子字符串。
另一种子字符串相关的算法是 Rabin-Karp 算法,之前一篇文章提到过:Rabin-Karp相关取余讨论.
内容提要
- KMP核心代码,请烂熟于心。
- KMP原理。
- 例题 686. 重复叠加字符串匹配.
KMP 核心代码
目的:快速检验字符串t
是否为字符串s
的子字符串。
基本思想:两次高度相似的代码–之后会详细解释为什么可以这样。
boolean KMP(char[] t, char[] s){
int[] fail=new int[t.length];
Arrays.fill(fail, -1);
for(int i=1, j=-1; i<t.length; i++){
while(j!=-1 && t[