字符串搜索的KMP算法实现(java版)
2013-05-02 15:32
537 查看
刚才看到新闻频道转截的一篇文章:阮一峰:字符串匹配的KMP算法,图文并茂通俗易懂,就用java实现了一下
对于我这个只会排序算法的人来说,也算是一个比较难的任务了。
上次写的逻辑有问题,这次不知道有没有bug。
对于我这个只会排序算法的人来说,也算是一个比较难的任务了。
上次写的逻辑有问题,这次不知道有没有bug。
/** * Knuth-Morris-Pratt 算法 * * @author yinqi * @date 2013-5-5 - 上午11:11:56 */ public class StringSearchKMP { /** * @param args */ public static void main(String[] args) { int index = knuthMorrisPratt("ABCDABABCDAABCDABCABCDABDABD", "ABCDABDABD", 0); System.out.println(index); } /** * 字符串搜索KMP算法 <br> * * @param searchStr * @param matchStr * @param start * @return */ public static int knuthMorrisPratt(String searchStr, String matchStr, int start) { char[] searchchar = searchStr.toCharArray(); char[] mchar = matchStr.toCharArray(); int[] fixNum = lengthKMP(mchar); System.out.println(Arrays.toString(fixNum)); int neglect = 1; for (int i = start; i <= searchchar.length - mchar.length; i += neglect) { boolean con = true; for (int j = 0; j < mchar.length; j++) { if (searchchar[i + j] != mchar[j]) { con = false; neglect = j + 1 - fixNum[j == 0 ? 0 : j - 1]; break; } } if (con) { return i + 1; } } return -1; } /** * 获取部分匹配值的共有元素的长度 <br> * * @param mchar * @return */ public static int[] lengthKMP(char[] mchar) { int[] fixNum = new int[mchar.length]; for (int i = 1, j = 0; i < mchar.length; i++) { if (mchar[j] == mchar[i]) { fixNum[i] = j + 1; j++; } else if (j > 0) { j = 0; i -= j; } } // return [0, 0, 0, 0, 1, 2, 0, 1, 2, 0]ABCDABDABD return fixNum; } } /* * A BC * AB C * A BCD * AB CD * ABC D * A BCDE * AB CDE * ABC DE * ABCD E */
相关文章推荐
- java实现子字符串的KMP算法
- 凭借对KMP算法的了解,用java实现了一下,结果和java自带的字符串indexOf比,性能差了十倍。。。
- hdu 2594 java实现字符串KMP算法
- java实现字符串kmp算法
- KMP 字符串搜索算符 java实现
- 字符串模式匹配中BF算法和KMP算法的java实现
- 字符串转整数的java实现
- Java实现-两个字符串是变位词
- Java split()方法实现切割字符串
- JAVA利用split实现切分字符串
- 跟据经纬度实现附近搜索Java实现
- java统计字符串中重复【单个】字符的次数频次-使用字符数组实现
- 【Java】三种方式实现统计字符串中字母,数字,空格和其它类型的数量
- 二分法搜索(JAVA语言实现)
- java简单的实现搜索框的下拉显示相关搜索功能
- 函数字符串C++的String类的字符串分割实现----(效果等于Java的String类的split函数)
- 字符串左右移动(java实现)
- Java递归实现字符串全排列
- java实现二分搜索树
- 数据结构与算法分析笔记与总结(java实现)--字符串7:句子的逆序练习题