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>
相关文章推荐
- Swift-常量与变量
- 基于S3C6410的ARM11学习(三) 核心初始化之设置中断向量表
- 得到栈的最小元素
- 算法训练 连续正整数的和
- mac分辨率设置
- 改变opacity实现图片轮播
- magent 启动时error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: N
- MSSQL和Oracle常用函数比对
- centos 安装jdk/resin/mysql
- 如何用JS判断网页中某个id的网页元素是否存在
- 二进制存储问题
- Android App 沉浸式状态栏
- js获取URL参数
- 集训队专题(6)1008 Courses
- 微信企业号开发1--连接
- jsp 内置对象总结
- mac下面点击右键
- 安卓开发Activity转换动画
- js for循环输出i为同一值得问题
- 有免费的邮件系统 为何要选择收费的?