字符串匹配算法KMP Java实现
来源:互联网 发布:$1 linux 编辑:程序博客网 时间:2024/05/16 01:26
kmp算法的核心思想:先对搜索字串生成偏移对照表,匹配时从左向右依次比较(bm从右向左,号称比kmp更快),相等则文档和搜索字串的下标+1迭代,否则查表,定位最优的偏移位置(文档下标不变,搜索字串下标改变)。例外是,若搜索字串首字符不匹配,搜索字串下标不变,文档的下标+1。
import java.util.Arrays;public class KMPSearch {public static int[] table;public static void generateTab(String key){//查询字串生成偏移对照表,一次迭代就可以int len=key.length();table=new int[len];Arrays.fill(table, 0);for(int i=1;i<len;i++){if(key.charAt(i)==key.charAt(table[i-1])){table[i]=table[i-1]+1;}}}public static int KMPSearchs(String doc,String key){generateTab(key);int result=-1;int doc_size=doc.length(),key_size=key.length(),doc_iter=0,key_iter=0;while(doc_iter<doc_size){//遍历所查询的文档,同样,单层循环就可以实现→_→if(doc.charAt(doc_iter)==key.charAt(key_iter)){doc_iter++;key_iter++;}else{if(key_iter==0){doc_iter++;continue;}else{key_iter=table[key_iter-1];continue;}}if(key_iter==key_size){result=doc_iter-key_size;break;}}return result;}public static void main(String[] args){int i=KMPSearchs("bbc abcdab abcdabcdabde","abcdabd");System.out.println(i);}}
算法讲解详见http://itindex.net/detail/45421-%E5%AD%97%E7%AC%A6%E4%B8%B2-%E5%8C%B9%E9%85%8D-kmp
0 0
- 字符串匹配算法KMP Java实现
- 字符串匹配:KMP算法之JAVA实现
- KMP字符串匹配算法Java实现
- KMP字符串模式匹配算法Java实现
- kmp字符串匹配算法实现
- 字符串匹配KMP算法实现
- KMP字符串匹配算法实现
- 字符串匹配算法KMP实现
- kmp算法实现字符串匹配
- java KMP 字符串匹配算法
- KMP算法(字符串匹配算法)详解及java实现
- Java实现算法导论中KMP字符串匹配算法
- 字符串匹配之KMP算法思路、原理与Java实现
- Java实现 字符串匹配 KMP 算法
- 字符串匹配之KMP算法思路、原理与Java实现
- java实现字符串的一般和KMP模式匹配算法
- 字符串匹配——KMP算法的Java实现
- 【小算法】KMP字符串匹配算法实现
- Reorder List
- hibernate 批量删除
- ffmpeg 如何探测网络流格式/如何从内存中获取数据
- 2015年1月9日:十年小结与年度计划
- SUSE Linux 10配置裸设备(raw devices)
- 字符串匹配算法KMP Java实现
- Struts2架包详解
- HR学习笔记
- Python:入门笔记之list slices计算方法、匿名表达式、CGI、数据类型及应用领域
- 浅谈千万级PV/IP规模高性能高并发网站架构
- 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
- SVN版本冲突解决详解
- 蓝屏炸弹
- java的web.xml中<url-pattern>配置