代码实现:
public class KMPDemo {
//得到模式串的next[]
public static int[] getNext(String pattern){
int j=0,k=-1;
int[] next=new int[pattern.length()];
next[0]=-1;
while(j<pattern.length()-1){
if(k==-1 || pattern.charAt(j)==pattern.charAt(k)){
next[++j]=++k;
}else{
k=next[k];
}
}
return next;
}
public static int kmp(String t,String p){
int[] next=getNext(p);
int i=0,j=0;
while(i<t.length() && j<p.length()){
if(j==-1 || t.charAt(i)==p.charAt(j)){
i++;
j++;
}else{
j=next[j];
}
}
if(j==p.length())
return i-p.length();
return -1;
}
public static void main(String[] args){
String t="ababcabababdc";
String p="babdc";
int re=kmp(t,p);
System.out.println(re);
}
}