KMP算法
public class KmpmMethod {
/**
* 具体的匹配
* @param str1
* @param str2
* @return
*/
public static int kMPMatcher(String str1,String str2){
int i=0,j=-1;
int arr[]=next(str2);
while(i<str1.length()&&j<str2.length()){
if(j==-1||str1.charAt(i)==str2.charAt(j)){
i++;
j++;
}
else j=arr[j];
}
if(j==str2.length())
return i-j;
return -1;
}
/**
* next函数
* @param str
* @return
*/
public static int[] next(String str){
int j=-1,i=0;
int arr[]=new int[str.length()+1];
arr[0]=-1;
while(i<str.length()){
if(j==-1||str.charAt(i)==str.charAt(j)){
j++;
i++;
arr[i]=j;
}
else
j=arr[j];
}
return arr;
}
public static void main(String[] args) {
String str1="abcacbaaacabeabccaaa";
String str2="aacab";
int result=kMPMatcher(str1,str2);
if(-1==result){
System.out.println("没有找到匹配的字串");
}else{
System.out.println("匹配的位置为"+result);
}
}
}