字符串模式匹配是很重要的一种算法操作,在字符串查找中经常用到。下面仅提出代码。
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];
}
}
}
}
本文介绍了一种高效的字符串模式匹配算法——KMP算法,并提供了详细的Java代码实现。该算法通过预处理模式串来减少不必要的比较,提高了搜索效率。
2507

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



