KMP的思路与实现
来源:互联网 发布:程序员微电影 编辑:程序博客网 时间:2024/06/10 02:44
思路
我就不提为啥有KMP和KMP的原理了,这段跳过。。。首先计算next数组,算法如下:输入:String m;输出:int[] next;1.next[0]=0;2.计算next[i]: 从j=next[i-1]开始,可以得到m[i-1]的next值,辣么如果,m[i]=m[j],说明next[i]=next[i-1]+1(就是多匹配上了一个) 如果m[i]!=m[j],辣么我们需要去看比j短1的字符串是否匹配上,就是j=next[j-1],知道找到一个m[i]=m[j]或者是匹配到0.3.输出next有了next数组,KMP的匹配和计算next数组就惊人的相似了,其实也是一个东西,是不是很神奇~~~就酱!
Code
public class MyKMP { public int kmp(String s, String m) { int[] next = kmp(m); int j = 0; for (int i = 0; i < s.length(); i++) { while (j > 0 && s.charAt(i) != m.charAt(j)) j = next[j]; if (s.charAt(i) == m.charAt(j)) j++; if (j == m.length()) { return i - j + 1; } } return -1; } public int[] kmp(String m) { int[] next = new int[m.length()]; int len = m.length(); int i, j = 0; next[0] = 0; for (i = 2; i < len; i++) { while (j > 0 && m.charAt(i) != m.charAt(j)) { j = next[j - 1]; } if (m.charAt(i) == m.charAt(j)) j++; next[i] = j; } return next; } public static void main(String[] args) { String a = "0012345671234567"; String b = "1234567"; MyKMP m = new MyKMP(); System.out.print(m.kmp(a, b)); }}
0 0
- KMP的思路与实现
- 字符串匹配之KMP算法思路、原理与Java实现
- 字符串匹配之KMP算法思路、原理与Java实现
- strstr的实现与KMP
- Windows扫雷的设计思路与实现
- join的实现原理与优化思路
- 关于layerfsd的实现与思路
- 几道位操作的题目思路与实现
- 排序算法的思路与java实现
- 幻方的思路与实现
- kmp算法的理解与实现
- kmp算法的理解与实现
- KMP算法的理解与实现
- KMP算法的剖析与实现
- kmp算法的理解与实现
- 字符串匹配的KMP算法思路
- 无进程DLL木马的又一开发思路与实现
- 无进程DLL木马的又一开发思路与实现
- OC制作通讯录(MRC模式)
- Android fragment 生命周期及替换函数
- 2016名企校招时间表出炉~~再没有比这个更全面的信息了
- [Mysql数据库] innodb_log_file_size设置
- hdu1027(使用next_permutation求第m小的全排列)
- KMP的思路与实现
- bootstrap-table 分页的问题
- VC环境OpenSSL安装以及编程过程
- [Mysql数据库] 将MYSQLDUMP全库备份分为单库文件的方法(自己写的小工具)
- delphi的idhttp的get 和 post的使用
- Android轮播图封装,下拉刷新相结合
- 什么是coredump
- 浅聊流水系统
- UITableView 如何不动态计算返回的cell 的高度