您的位置:首页 > 其它

KMP字符串查找算法

2016-02-22 14:34 375 查看
<span style="font-size:18px;">/**
* KMP字符串查找算法
* @author xxxu
*
*/
public class KMP {
private String pat;
private int[][] dfa; //KMP的核心
public KMP(String pat){
this.pat=pat;
int M=pat.length();
int R=65536;//Unicode码值不大于65536
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];//复制匹配失败情况下的值
}
dfa[pat.charAt(j)][j]=j+1;//设置匹配成功情况下的值
X=dfa[pat.charAt(j)][X];//更新重启状态
}
}

public int search(String pat,String txt){
int i;
int j;
int M=pat.length();
int N=txt.length();
for(i=0,j=0;i<N&&j<M;i++){
j=dfa[txt.charAt(i)][j];
}
if(j==M){
return i-M; //找到匹配(到达模式字符串的结尾)
}else{
return N;//未找到匹配(到达文本字符串的结尾)
}
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: