您的位置:首页 > 理论基础 > 数据结构算法

KMP算法

2015-08-20 11:13 239 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp 数据结构