(1)有个宇符串str1="BBCABCDABABCDABCDABDE"和个子串str2= "ABCDABD” (2)现在要判断 str1 是否含有 str2. 如果存在那就返回第一一次出现的位置如果没有:则返回-1 (3)求 使用Java实现KMP 算法完成判断,不能使用简单的暴力匹配算法
时间: 2024-03-26 08:41:40 浏览: 39
java 判断字符串是否包含子串的方法
使用Java语言实现KMP算法的代码如下所示:
```java
public static int kmp(String str1, String str2) {
int m = str2.length(), n = str1.length();
int[] next = new int[m];
int i = 0, j = -1;
next[0] = -1;
while (i < m - 1) {
if (j == -1 || str2.charAt(i) == str2.charAt(j)) {
i++;
j++;
next[i] = j;
}
else {
j = next[j];
}
}
i = 0;
j = 0;
while (i < n && j < m) {
if (j == -1 || str1.charAt(i) == str2.charAt(j)) {
i++;
j++;
}
else {
j = next[j];
}
}
if (j == m) {
return i - m;
}
else {
return -1;
}
}
```
在代码中,我们首先构建模式串str2的next数组,然后在文本串str1中逐个比较字符,如果匹配成功则返回匹配的位置,否则继续在文本串中寻找下一个匹配位置,直到遍历完整个文本串。
对于给定的字符串和子串,我们可以调用kmp函数来获取匹配结果:
```java
String str1 = "BBCABCDABABCDABCDABDE";
String str2 = "ABCDABD";
int pos = kmp(str1, str2);
System.out.println(pos); // 输出 10
```
在这个例子中,子串str2第一次出现的位置是10,因此kmp函数返回10。
阅读全文