kmp算法java代码实现——使用next数组实现对目标字符串查找
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
String str2 = sc.next();
char a[] = str.toCharArray();
char b[] = str2.toCharArray();
int next[] = new int[b.length];
for (int i = 0; i <b.length ; i++) {
next[i] =next(b,i+1);
}
int bl=0;
for (int i = 0; i <a.length ; i++) {
if (a[i] == b[bl]){
bl++;
if (bl == b.length){
System.out.println("匹配成功,有相同字符串");
break;
}
}else{
if (next[bl] == 0&&bl != 0){
i--;
}
bl = next[bl];
if (i+b.length >a.length){
System.out.println("无法匹配,没用相同字符串");
break;
}
}
}
}
private static int next(char a[],int l){
int max = 0;
int length = l;
for (int i = length-1; i >0 ; i--) {
int count = 0;
for (int j = 0; j <length-i ; j++) {
if (a[j] == a[j+i]){
count++;
if (count>max)
{
max = count;
}
}else{
count=0;
}
}
}
return max;
}
}
由于是笔者自己学习理解的时候写的,可能有不够简洁的地方,请指正
这个代码不能区分大小写 如输入:
AAAAAA
aaa
输出的是:无法匹配,没用相同字符串