kmp实现及其改进算法的实现:
public class Kmp {
public int[] getNext(String pattern) {
int[] next=new int[pattern.length()];
next[0]=-1;
int i=-1;
int j=0;
while(j<pattern.length()-1) {
if(i==-1||pattern.charAt(j)==pattern.charAt(i)) {
i++;
j++;
next[j]=i;
}else {
i=next[i]; //对称,递归的思想
}
}
System.out.println(next.length);
for( int w=0;w<next.length;w++) {
System.out.print(next[w]+" ");
}
System.out.println();
return next;
}
public int[] getNextB(String pattern) {
int[] next=new int[pattern.length()];
next[0]=-1;
int i=-1;
int j=0;
while(j<pattern.length()-1) {
if(i==-1 || pattern.charAt(i)==pattern.charAt(j)) {
i++;
j++;
if(pattern.charAt(i)!=pattern.charAt(j)) {
next[j]=i;
}else {
next[j]=next[i];
}
}else {
i=next[i];
}
}
System.out.println("nciwefniuwef");
for( int w=0;w<next.length;w++) {
System.out.print(next[w]+" ");
}
System.out.println();
return next;
}
public int kmp(String str,String sub_str) {
System.out.println("JJJJJJJJJJJJJJJJJJJJJJJJJJJJ");
int[] next=getNextB(sub_str);
int i=0;
int j=0;
while(j<str.length()) {
if(i>0 && sub_str.charAt(i)!=str.charAt(j)) {
i=next[i]; //递归进行 https://blog.csdn.net/v_july_v/article/details/7041827
}else{
i++;
j++;
}
if(i==sub_str.length()) {
return j;
}
}
return -1;
}
参考链接: https://blog.csdn.net/v_july_v/article/details/7041827