KMP快速模式匹配的java实现
2013-07-25 19:18
513 查看
假期实在无聊赖啊。把这个算法实现了一下即算是打发时间也算练练手了。
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实现
- java实现Brute-Force和KMP模式匹配
- KMP模式匹配 Java实现
- KMP字符串模式匹配算法Java实现
- java实现字符串的一般和KMP模式匹配算法
- KMP模式匹配算法原理分析、next数组优化及java实现
- KMP模式匹配算法 C++实现
- 转载网络上最简单易懂的KMP模式匹配算法——外加代码实现
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配的C实现
- KMP 快速模式匹配算法
- 快速模式匹配算法(KMP)
- KMP字符串模式匹配算法实现
- Java-过滤字符串(用模式匹配实现)
- 使用Python语言写一个简单的KMP模式匹配算法实现
- java实现算法之KMP匹配算法(三个关键点掌握即可理解)
- KMP模式匹配算法中next,nextval的分别实现
- 数据结构之串的KMP模式匹配算法的实现
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- KMP模式匹配算法实现与改进