您的位置:首页 > 编程语言 > Java开发

KMP算法代码(java版)

2013-04-19 15:42 495 查看
JAVA代码如下:

public class KMP {
public static void main(String[] args) {
KMP kmp = new KMP();
String target="asfsdfssaaabcadsdfaaaaaaaadsf";
String mode="fsdfss";
boolean result=kmp.mathString(target, mode);
if(!result){
System.out.println("主串:"+target);
System.out.println("子串:"+mode);
System.out.println("没有找到匹配的子串");
}

}

public boolean mathString(String target, String mode) {
int[] next = getNextArray(mode);
int i = 0;
int j = 0;
while (i < target.length() && j < mode.length()) {

if (j == 0 || target.charAt(i) == mode.charAt(j)) {
i++;
j++;
} else {
if(next[j]==-1){
j=0;
i++;
}else{
j=next[j];
}
}

}
if (j == mode.length()){
System.out.println("主串:"+target);
System.out.print("子串:");
for(int t=0;t<i-mode.length();t++){
System.out.print(" ");
}
System.out.println(mode);
System.out.println("主串匹配的位置从:"+(i-mode.length()+1)+"到"+i);
return true;
}

return false;
}

public int[] getNextArray(String mode) {
int j = 0, k = -1;
int[] next = new int[mode.length()];
next[0] = -1;
while (j < mode.length()-1) {
if (k == -1 || mode.charAt(j) == mode.charAt(k)) {
++j;
++k;
if (mode.charAt(j) != mode.charAt(k)) {
next[j] = k;
} else {
next[j] = next[k];
}
}
else
k = next[k];
}
return next;
}

}
输出结果:

主串:asfsdfssaaabcadsdfaaaaaaaadsf
子串: fsdfss
主串匹配的位置从:3到8

暂时放博客里存起来,以备不时之需O(∩_∩)O哈!。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA 算法