KMP快速模式匹配的java实现
2013-07-25 11:46
405 查看
假期实在无聊赖啊。把这个算法实现了一下即算是打发时间也算练练手了。
KMP算法的关键是用归纳法计算失败函数。网上很详细了。下面直接给出代码。
KMP算法的关键是用归纳法计算失败函数。网上很详细了。下面直接给出代码。
/** * * @author Vincent * */ public class PatternMap { private String pat; //模式 private int [] f; //模式对应的失败函数 private String source; //目标 PatternMap(String p,String s){ pat=p;source=s;f=new int[pat.length()]; } int KMP_FastFind(){ Fail(); int p=0,s=0; int m=pat.length(),n=source.length(); while(p<m&&s<n){ if(pat.charAt(p)==source.charAt(s)){ p++;s++; } else if(p==0)s++; else p=f[p-1]+1; } if(p<m) return -1; return s-m; //下标从0开始 } void Fail(){ int m=pat.length(); f[0]=-1; int i=0; for(int j=1;j<m;j++){ i=f[j-1]; while( (pat.charAt(j)!=pat.charAt(i+1)) && (i>0) ){ i=f[i]; } if(pat.charAt(j)==pat.charAt(i+1)){ f[j]=i+1; } else f[j]=-1; } } public static void main(String[] args){ PatternMap pm=new PatternMap("vince_iamvincent","vincevince_iamvincentaaa"); System.out.println(pm.KMP_FastFind()); /* * print 失败函数 */ int m=pm.pat.length(); for(int i=0;i<m;i++){ System.out.println(pm.f[i]); } } }
相关文章推荐
- KMP快速模式匹配的java实现
- KMP模式匹配算法原理分析、next数组优化及java实现
- java实现Brute-Force和KMP模式匹配
- KMP模式匹配 Java实现
- KMP字符串模式匹配算法Java实现
- java实现字符串的一般和KMP模式匹配算法
- KMP字符串模式匹配算法实现
- KMP模式匹配算法中next和nextval数组的快速求解
- 转载网络上最简单易懂的KMP模式匹配算法——外加代码实现
- 经典算法研究:模式匹配(子串匹配)之 KMP 算法(C语言实现版)
- 快速模式匹配算法(KMP)
- KMP 单模式匹配, 实现 strStr()
- 快速模式匹配算法(KMP)
- KMP字符串模式匹配算法实现(php)
- KMP字符串模式匹配算法实现
- 使用Python语言写一个简单的KMP模式匹配算法实现
- KMP模式匹配算法实现
- KMP 快速模式匹配算法
- java实现算法之KMP匹配算法(三个关键点掌握即可理解)
- KMP 快速模式匹配算法