package com.answer.kmp;
public class Test1 {
public int ViolentMatch(String str1,String str2){
char[] c1=str1.toCharArray();
char[] c2=str2.toCharArray();
int l1=c1.length;
int l2=c2.length;
int[] next=new int[l2];
GetNext(str2,next);
int i=0,j=0;
while(i<l1&&j<l2){
if(j==-1||c1[i]==c2[j]){
i++;
j++;
}else {
j=next[j];
}
}
if(j==l2){
return i-j;
}else {
return -1;
}
}
public void GetNext(String str2,int[] next){
char[] c2=str2.toCharArray();
int l2=c2.length;
next[0]=-1;
int k=-1;
int j=0;
while (j<l2-1){
if(k==-1||c2[k]==c2[j]){
++k;
++j;
if(c2[j]!=c2[k]){
next[j]=k;
}else {
next[j]=next[k];
}
//next[j]=k;
}else {
k=next[k];
}
}
}
public static void main(String[] args) {
int pos=new Test1().ViolentMatch("abacababc","abab");
System.out.println(pos);
}
}