KMP字符串查找算法

来源:互联网 发布:三菱plc编程指令大全 编辑:程序博客网 时间:2024/06/05 06:53
<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码值不大于65536dfa=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>

0 0
原创粉丝点击