计算next数组
//计算获取next数组
public static int[] getNext(String str) {
int[] next = new int[str.length()]; //记录前一个字符的移动值
int i = -1, j = 0;
next[0] = -1;
while(j<str.length()-1) {
if(i == -1 || str.charAt(i)==str.charAt(j)) { //如果字符串相等
i++;
j++;
next[j] = i;
} else {
i = next[i];
}
}
return next;
}
kmp算法
//Kmp算法实现
public static int kmp(String s, String t) {
int i= 0, j = 0;
int[] next = getNext(t);
while(i<s.length()) {
if(j == -1 || s.charAt(i) == t.charAt(j)) {
i++;
j++;
} else {
j = next[j];
}
if(j==t.length()) {
return i-j;
}
}
return -1;
}