KMP算法java实现之策略模式
来源:互联网 发布:淘宝商城女包特卖 编辑:程序博客网 时间:2024/05/16 04:56
KMP算法是个经典的算法,网上很多大神都给出了很详细的说明,在此不再赘述。
运行结果:3
下面是KMP算法的实现,使用的是策略模式。
public interface INextBuilder {public abstract int[] build(char[] p);}
编写INextBuilder接口的递归思想实现
package com.soft.kmp;public class RecurNextBuilder implements INextBuilder {@Overridepublic int[] build(char[] p) {int[] next=new int[p.length];int k=-1;next[0]=-1;//遍历0->p.length-1for(int i=0;i<p.length-1;i++){if(k==-1||p[i]==p[k]){k++;next[i+1]=k;}else{k=next[k];}}return next;}}
编写INextBuilder接口的非递归实现
package com.soft.kmp;public class StraitNextBuilder implements INextBuilder {@Overridepublic int[] build(char[] p) {//自己来完成吧,测测你的水平return null;}}
最后编写KMP类以及测
package com.soft.kmp;public class KMP {private INextBuilder nextBuilder;public KMP(INextBuilder nextBuilder){this.nextBuilder=nextBuilder;} public KMP() {this.nextBuilder=new RecurNextBuilder();}public int KMPMatch(String s,String p){char[] pa=p.toCharArray();char[] sa=s.toCharArray(); int[] next=this.nextBuilder.build(pa); for(int i=0,j=0;i<sa.length;){ if(j==-1 ||sa[i]==pa[j]){ i++;j++; }else{ j=next[j]; } if(j==pa.length){ return i-j; } } return -1; } public static void main(String[] args) { KMP kmp=new KMP(); System.out.println(kmp.KMPMatch("helllo", "llo")); }}
运行结果:3
0 0
- KMP算法java实现之策略模式
- KMP算法之java实现
- Java算法实现之KMP算法
- KMP字符串模式匹配算法Java实现
- Java实现设计模式之策略模式
- 字符串匹配:KMP算法之JAVA实现
- java实现kmp算法
- KMP算法java实现
- Java实现KMP算法
- KMP算法java实现
- KMP算法----java实现
- KMP算法java实现
- KMP算法Java实现
- KMP 算法 java实现
- Java实现KMP算法
- KMP算法Java实现
- KMP算法java实现
- KMP算法-Java实现
- 最小二乘法C#实现,简单代码
- php文件上传之$_FILES全局变量用法介绍
- QML类型说明-ComboBox
- 【数据结构练习】系统任务调度问题
- 总结之:CentOS 6.5内核编译步骤及配置详解
- KMP算法java实现之策略模式
- 在VMware10的虚拟机ubantu14中安装vmware-tools
- 破解weblogic(数据库)密码
- 上课笔记--运筹学
- 关于platform中的id_table
- IOS项目常用
- QML类型说明-ComboBoxStyle
- VS链接mysql方法
- EM12c监控页面非活动时登录失效