KMP algorithm, java implementation

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;
 }
}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326608672&siteId=291194637