码迷,mamicode.com
首页 > 其他好文 > 详细

KMP

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

标签:for   ar   amp   new   ad   c++   on   c   har   

/**
* 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

标签:for   ar   amp   new   ad   c++   on   c   har   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!