public class KMPTest {
public static void main(String[] args) {
String T="abcaccbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcb" +
"abcagcbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcbabcagcb" +
"abcagcbabcagcbabcagcbabcagcbabcagcbabcagcb" +
"abcagcbabcagcbabcagcbabcagcbabcagcbabcagcb" +
"abcagcbabcagcbabcagcbabcagcbabcagcb" +
"abcagcbabcagcbabcagcbabcagcbabcagcbabcacb";
String P="abcagcbabcagcbabcagcbabcagcbabcagcbabcacba";
search(T,P);
T.indexOf(P);
}
public static int[] getNext(String P) {
char[] pChar=P.toCharArray();
int length=pChar.length;
int[] next=new int[length];
next[0]=-1;
int k=-1,j=0;
while(j<length-1){
if(k==-1||pChar[k]==pChar[j]){
next[++j]=++k;
}else{
k=next[k];
}
}
return next;
}
public static int search(String T,String P) {
if(T!=null&&P!=null){
char[] tChar=T.toCharArray();
int tLength=tChar.length;
char[] pChar=P.toCharArray();
int pLength=pChar.length;
int[] next=getNext(P);
if(tLength>=pLength){
int i=0,j=0;
while (i<tLength&&j<pLength) {
if(j==-1||tChar[i]==pChar[j]){
i++;
j++;
}else{
j=next[j];
}
}
if(j==pLength){
return i-j;
}
}
}
return -1;
}
}
KMP algorithm, java implementation
Guess you like
Origin http://10.200.1.11:23101/article/api/json?id=326608672&siteId=291194637
Recommended
Ranking