首页 > 其他 > 详细

KMP

时间:2014-08-24 15:25:32      阅读:201      评论:0      收藏:0      [点我收藏+]

/**
* Created by xie on 14-8-24.
*/
public class KMP {
private String pat;
private int M;
private int R=256;
private int dfa[][];

public KMP(String pat){
M=pat.length();
dfa=new int[R][M];
dfa[pat.charAt(0)][0]=1;
for(int X=0,j=1;j<M;j++){
for(int c=0;c<R;c++) dfa[c][j]=dfa[c][X]; //set mismatch
dfa[pat.charAt(j)][j]=j+1; //set match
X=dfa[pat.charAt(j)][X]; //update X
}
}

public int search(String text){
int N=text.length();
int i,j;
for(i=0,j=0;i<N&&j<M;i++){
j=dfa[text.charAt(i)][j];
}
if(j==M) return i-M;
else return -1;
}

public static void main(String[] args) {
String pat="abac";
String text="abadabadd";

KMP matcher=new KMP(pat);
int index=matcher.search(text);
System.out.println(index);
}
}

KMP

原文:http://www.cnblogs.com/xiexiaobo/p/3932777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!