java写一段kmp算法
时间: 2023-10-14 15:24:22 浏览: 49
下面是一段Java实现的KMP算法示例:
```java
public class KMPAlgorithm {
/**
* 获取模式串的next数组
* @param pattern 模式串
* @return next数组
*/
private static int[] getNext(String pattern) {
int n = pattern.length();
int[] next = new int[n];
next[0] = -1;
int i = 0, j = -1;
while (i < n - 1) {
if (j == -1 || pattern.charAt(i) == pattern.charAt(j)) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
return next;
}
/**
* KMP算法实现字符串匹配
* @param s 主串
* @param pattern 模式串
* @return 匹配成功的起始位置,-1表示匹配失败
*/
public static int kmp(String s, String pattern) {
int[] next = getNext(pattern);
int i = 0, j = 0;
int m = s.length(), n = pattern.length();
while (i < m && j < n) {
if (j == -1 || s.charAt(i) == pattern.charAt(j)) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == n) {
return i - j;
} else {
return -1;
}
}
public static void main(String[] args) {
String s = "ABCDABCDABDE";
String pattern = "ABCDABD";
int index = kmp(s, pattern);
if (index == -1) {
System.out.println("匹配失败");
} else {
System.out.println("匹配成功,起始位置为:" + index);
}
}
}
```
在这个示例中,我们首先实现了获取模式串的next数组的方法,然后在KMP算法中使用这个next数组进行字符串匹配。最后,在main方法中调用kmp方法进行测试。