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哈!。。。。。