用Java写一个kmp算法
时间: 2024-05-10 12:21:17 浏览: 104
java实现的kmp算法
4星 · 用户满意度95%
KMP算法是用来在一个文本串中查找一个模式串的算法,它的优势在于在找不到匹配的字符时,能够快速跳过不可能匹配的字符,从而提高查找效率。
下面是一个使用Java实现KMP算法的例子:
```
public class KMP {
// next数组表示模式串的前缀和后缀的最长公共部分的长度
private int[] next;
public KMP(String pattern) {
// 计算next数组
int len = pattern.length();
next = new int[len];
next[0] = -1;
int k = -1;
int j = 0;
while (j < len - 1) {
if (k == -1 || pattern.charAt(k) == pattern.charAt(j)) {
k++;
j++;
next[j] = k;
} else {
k = next[k];
}
}
}
// 在文本串text中查找模式串pattern
public int search(String text) {
int m = 0;
int i = 0;
int len = text.length();
int plen = pattern.length();
while (m + i < len) {
if (i == -1 || pattern.charAt(i) == text.charAt(m + i)) {
i++;
if (i == plen) {
return m;
}
} else {
m = m + i - next[i];
i = next[i];
}
}
return -1;
}
}
```
上面的代码中,我们首先通过构造函数计算出next数组,然后在search方法中使用KMP算法在文本串text中查找模式串pattern。 如果找到了匹配,search方法会返回匹配开始的位置,否则返回-1。
要使用KMP算法,你需要创建一个KMP对象,然后调
阅读全文