调到前面最长相等子串的下一个进行对比:
1.初始化;
2.处理前后缀不同情况;
3.处理前后缀相同情况;
4.给next[]数组赋值。
public static int[] kmpnext(String dest){
/* 初始化;
处理前后缀不同情况;
处理前后缀相同情况;
给next[]数组赋值。*/
int [] next=new int[dest.length()];
next[0]=0;
for (int i=1,j=0;i<dest.length();i++){
while(j>0&&dest.charAt(i)!=dest.charAt(j)){
j=next[j-1];
}
if (dest.charAt(i)==dest.charAt(j)){
j++;
}
next[i]=j;
}
return next;
}
public static int kmpsearch(String str1,String str2,int[] next){
for (int i=0,j=0;i<str1.length();i++){
while (j>0&&str1.charAt(i)!=str2.charAt(j)){
j=next[j-1];
}
if (str1.charAt(i)==str2.charAt(j)){
j++;
}
if (str2.length()==j){
return i-j+1;
}
}
return -1;
}