package kmpDemo;
import java.util.Arrays;
public class Kmp {
public static void main(String[] args) {
String str1 = "mississippi";
String str2 = "issip";
int voer = kmp(str1,str2);
System.out.println(voer);
}
public static int kmp(String str1,String str2){
int[] kmptable1 = kmpTable(str2);
for (int i = 0,j = 0;i < str1.length(); i++) {
while (j > 0 && str1.charAt(i) != str2.charAt(j)){
j = kmptable1[j - 1];
}
if (str1.charAt(i) == str2.charAt(j)){
j++;
}
if (j == str2.length()){
return i - j + 1;
}
}
return -1;
}
public static int[] kmpTable(String str){
int[] reint = new int[str.length()];
for (int i = 1,j = 0; i < str.length() ; i++) {
while(j > 0 && str.charAt(i) != str.charAt(j)){
j = reint[j - 1];
}
if (str.charAt(i) == str.charAt(j)){
j++;
}
reint[i] = j;
}
return reint;
}
}