public class KMP { private char[] source = {'a','b','c','b','c','a','b','a','b','d','d','e','f','g','h','i','j','a','b','c','a','b','a','b','d','a'}; private char[] target = {'a','b','c','a','b','a','b','d'}; private int[] getNextArray(char[] target){ int[] ret = new int[target.length]; ret[0] = 0; for (int i = 1; i < target.length; i++) { int offset = ret[i-1]; while (offset > 0) { if (target[i] == target[offset]) { ret[i] = offset + 1; break; } else { offset = ret[offset]; } } if (offset == 0 && target[i] == target[0]) { ret[i] = 1; } } return ret; } private int indexOf(int[] next) { int offset = 0; int i = 0; while (i < target.length && offset < source.length) { if (target[i] == source[offset]) { i++; offset++; } else if (i == 0) { offset++; } else { i = i - 1 < 0 ? 0 : next[i - 1]; } } return offset; } public static void main(String[] args) { KMP k = new KMP(); long now = System.currentTimeMillis(); for (int i = 0 ; i < 1000000 ; i++) { int[] ret = k.getNextArray(k.target); k.indexOf(ret); } System.out.println(System.currentTimeMillis() - now); } }
本文介绍了一种使用KMP算法进行字符串匹配的方法,并通过一个具体的Java实现案例进行了性能测试。该案例定义了一个包含特定字符序列的目标字符串,并在一个较长的源字符串中查找该目标字符串出现的位置。此外,还提供了一段用于测试该算法效率的代码。

1657

被折叠的 条评论
为什么被折叠?



