kmp算法
来源:互联网 发布:软件测试自动化书籍 编辑:程序博客网 时间:2024/06/03 06:06
package kmp;public class KmpDemo {/** * @param args */public static void main(String[] args) {String tar = "aaaaaacefghij";String mode = "aaac";char[] tars = tar.toCharArray();char[] patterns = mode.toCharArray();int[] nexts = computNext(patterns);//TODO testfor (int i : nexts) {System.out.print(i + " ");}System.out.println();int suc = kmpMatch(tars, patterns, nexts);System.out.println("is match suc? " + suc);}/** * 找出模式串的next[]数组 实际为模式串的前缀后缀的最大相同子序列的最大长度数组. * @param patterns * @return */private static int[] computNext(char[] patterns) {int[] nexts = new int[patterns.length];for (int i = 1; i < patterns.length; i++) {int k = nexts[i - 1];while (patterns[i] != patterns[k] && k != 0) {k = nexts[k - 1];}if (patterns[i] == patterns[k]) {nexts[i] = k + 1;} else {nexts[i] = 0;}}return nexts;}public static int kmpMatch(char[] tar, char[] pattern, int[] nexts) {int i = 0;int j = 0;while ( i < tar.length && j < pattern.length ) { if( j == 0 || tar[i] == pattern[j] ) { ++i; ++j; } else { j = nexts[j - 1]; //当匹配失败的时候直接用p[j_next]与s[i]比较, //下面阐述怎么求这个值,即匹配失效后下一次匹配的位置 } } if( j >= pattern.length ) return i - pattern.length; else return -1; }}
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- db_update() 、 db_insert()相关操作
- poj 2457 dijkstra(星星之间买牛奶)
- MYSQL 获取当前日期及日期格式 141106
- 第十一周上机项目一(2)
- 第11周项目1-函数版星号图
- kmp算法
- 将博客搬至chinaunix
- jquery判断元素是否隐藏
- StringUtils常用方法+StringUtils详细介绍
- 第11周项目1函数版星号图(1)
- 第11周项目1(2)-函数版星号图(printchs)
- 编程:函数版星号图
- 动态规划--HDU--1024
- 第十一周项目1-函数版星号图2