参考http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
部分代码原作:http://www.cnblogs.com/Topless/archive/2011/10/16/2214450.html
java代码:
public class KPM {
// java实现kpm算法
// 算法原理:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
// http://v.youku.com/v_show/id_XOTMyMjcxNzIw.html?from=s1.8-1-1.2七月算法视频
// KMP中的核心算法,获得记录跳转状态的next数组
public static int[] next1(String sub) {
int[] a = new int[sub.length()];
char[] c = sub.toCharArray();
int length = sub.length();
int i, j;
a[0] = -1;
i = 0;
for (j = 1; j < length; j++) {
i = a[j - 1];
while (i >= 0 && c[j] != c[i + 1]) {
i = a[i];
}
if (c[j] == c[i + 1]) {
a[j] = i + 1;
} else {
a[j] = -1;
}
}
return a;
}
//与上面算法思路一致,换一种写法
public static int[] next2(S