一直以为数据结构的那些算法,对我这个实习开发人员来说应该很少用到,没想到竟然让我用到了。
一、代码
//kmp算法 str1:源字符串 str2:目标字符串
public int kmp(String str, String dest, int[] next) {//str文本串 dest 模式串
for (int i = 0, j = 0; i < str.length(); i++) {
while (j > 0 && str.charAt(i) != dest.charAt(j)) {
j = next[j - 1];
}
if (str.charAt(i) == dest.charAt(j)) {
j++;
}
if (j == dest.length()) {
return i - j + 1;
}
}
return 0;
}
//next数组
public int[] kmpnext(String dest) {
int[] next = new int[dest.length()];
next[0] = 0;
for (int i = 1, j = 0; i < dest.length(); i++) {
while (j > 0 && dest.charAt(j) != dest.charAt(i)) {
j = next[j - 1];
}
if (dest.charAt(i) == dest.charAt(j)) {
j++;
}
next[i] = j;
}
return next;
}
二、调用
//当kmp不等于0的时候说明匹配成功了。
int kmp = odDataService.kmp(s, odData1.getSiteIp(), odDataService.kmpnext(odData1.getSiteIp()));