KMP算法(java)
来源:互联网 发布:网球王子u17漫画软件 编辑:程序博客网 时间:2024/06/06 11:04
KMP算法是在字符串M中查找是否包含字符串N,存在返回字符串M匹配的字符首位置,将复杂度O(mn)降为O(m+n)
要看对KMP算法的理解,请参考字符串匹配的KMP算法
要看其中对匹配表的理解,请参考 KMP算法最浅显理解——一看就明白
下面是基于算法整理的Java代码:
public class KMP {private static int[] getNext(String b) {int len = b.length();int j = 0;int next[] = new int[len + 1];next[0] = next[1] = 0;for (int i = 1; i < len; 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;}public static List<Integer> search(String original, String find) {List<Integer> pos = new ArrayList<Integer>();int[] next = getNext(find);int j = 0;for (int i = 0; i < original.length(); i++) {while (j > 0 && original.charAt(i) != find.charAt(j))j = next[j];if (original.charAt(i) == find.charAt(j)) {j++;}if (j == find.length()) {pos.add(i - j + 1);j = 0;}}return pos;}public static int searchFirst(String original, String find) {int pos = -1;int[] next = getNext(find);int j = 0;for (int i = 0; i < original.length(); i++) {while (j > 0 && original.charAt(i) != find.charAt(j))j = next[j];if (original.charAt(i) == find.charAt(j)) {j++;}if (j == find.length()) {pos = i - j + 1;break;}}return pos;}public static void main(String[] args) { String a = "abcaabababaa"; String b = "abaa"; //List<Integer> aaa = search(a, b); int bbb = searchFirst(a, b); //System.out.println(aaa); System.out.println(bbb); }}
阅读全文
0 0
- KMP算法(java)
- KMP算法(java版)
- KMP算法(java版本)
- KMP算法(java实现)
- 字符串之KMP算法(Java)
- java实现kmp算法
- KMP算法java实现
- Java实现KMP算法
- KMP算法java实现
- KMP算法----java实现
- KMP算法 -java版
- KMP算法java实现
- KMP算法Java实现
- 字符串KMP算法-java
- KMP 算法 java实现
- Java实现KMP算法
- KMP算法java
- KMP算法Java实现
- 2017首届全球金融科技与区块链中国峰会—聆听行业领袖的真知灼见
- 当技术为组织所累时怎么办?将你的组织架构旋转90度!
- python 实现线性链表(单链表)--增加合并链表算法
- R与字符串操作
- Address localhost: 1099 is already in use问题解决
- KMP算法(java)
- OpenCV for Android 设置预览界面尺寸
- BZOJ3251 暴力
- React Native 误关闭 server 8081运行出现 Could not connect to development server 解决方法
- javascript闭包入门
- 深入浅出LSTM神经网络
- python获取接口数据,写入文件
- 2017-10 印象笔记修改字体大小快捷键
- 什么是 FreeMarker?