KMP 算法实现
来源:互联网 发布:邮箱的域名是什么 编辑:程序博客网 时间:2024/06/07 15:56
KMP算法: 字符串快速匹配算法,已知目标串 T 和 子串f, 依次比较 T 和 f 的每一位, 当匹配到第I 位发现不匹配时,需要移动子串继续比较,传统是每次移动一位,KMP算
法是求出已匹配子串的前缀和后缀的公共字串长度K, 每次移动K位从 T 的 i - k -1位开始匹配。
优点:KMP克服了每次比较失败只移动一位的复杂度,从 o(m*n) 减到 o(m+n)。
缺点 : 需要预处理子串 f ,求出 next 数组
例: T : 1231278 此时 i = 7
f: 1231245
当匹配到 T 的字符 7 时,匹配失败,由于此时 f 串12312有公共字串12,T 串不用从2开始匹配符,从3 开始比较即可。
能减少比较次数,需要对子串f求公共子串的长度
求子串的公共子串长度的方法,放到 next 数组里。
public int[] getNext(String b) { int len = b.length(); int[] next = new int[len + 1]; next[0] = next[1] = 0; int j = 0; //i表示字符串的下标,从0开始 for (int i = 1; i < len; i++) { //j在每次循环开始都表示next[i]的值,同时也表示需要比较的下一个位置 while (j > 0 && (b.charAt(i) != b.charAt(j))) j = next[j]; if (b.charAt(i) == b.charAt(j)) j++; next[i + 1] = j; } return next; }
0 0
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- KMP算法c++实现
- KMP算法java实现
- kmp算法实现
- tarjan模板(缩点,求有向图强连通分量)
- http://www.ezlippi.com/blog/2014/12/c-open-project.html
- 网址的正则表达式
- MAC系统下命令获取IP地址
- javaweb学习总结(三十)——EL函数库
- KMP 算法实现
- TIKA元数据提取
- java从头到位实现区域三级下拉框(升级版)
- ORACLE按日期分组写法
- JavaMail系列(四) 使用POP3协议接收并解析电子邮件
- javaweb学习总结(三十一)——国际化(i18n)
- keras中models的Squential类的源码简介
- Android属性动画(一) ------ 站在巨人的肩膀上学习总结
- ZOJ 3331 Process the Tasks(双塔DP)