字符串模式匹配是很重要的一种算法操作,在字符串查找中经常用到。下面仅提出代码。
package com.wl.test;
public class KMP {
public static int match(String src, String dst, int pos) {
char[] s = new char[src.length()];
src.getChars(0, src.length(), s, 0);
char[] d = new char[dst.length()];
dst.getChars(0, dst.length(), d, 0);
int[] next = new int[d.length];
get_next(d, next);
int i=pos, j=0;
while(i<s.length && j<d.length) {
if(j == -1 || s[i] == d[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if(j>=d.length) {
return i-d.length;
}
return -1;
}
private static void get_next(char[] d, int[] next) {
int i=0, j=-1;
next[0] = -1;
while(i<d.length-1) {
if(j == -1 || d[i] == d[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
private static void get_next_optimized(char[] d, int[] next) {
int i=0, j=-1;
next[0] = -1;
while(i<d.length-1) {
if(j == -1 || d[i] == d[j]) {
i++;
j++;
if(d[i] != d[j])
next[i] = j;
else
next[i] = next[j];
} else {
j = next[j];
}
}
}
}