实现过程
观看视频 双语。
代码
package com.atguigu;
import java.util.Scanner;
public class KMPTry {
public int[] ComputeTempArray(char[] pattern){
int[] temp=new int[pattern.length];
int index=0;
for(int i=1;i<pattern.length;){
if(pattern[index]==pattern[i]){
temp[i]=index+1;
i++;
index++;
}
else{
if(index!=0){
index=temp[index-1];
}
else{
temp[i]=0;
i++;
}
}
}
return temp;
}
public Boolean KMP(char[] text,char[] pattern){
if(text==null||text.length==0||pattern==null||pattern.length==0) return false;
if(text.length<pattern.length) return false;
int[] temp=ComputeTempArray(pattern);
int i=0;
int j=0;
while(i<text.length&&j<pattern.length){
if(text[i]==pattern[j]){
i++;
j++;
}
else{
if(j!=0){
j=temp[j-1];
}
else{
i++;
}
}
}
if(j==pattern.length) return true;
return false;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入text字符串");
String text= scan.nextLine();
System.out.println("请输入pattern子串");
String pattern=scan.nextLine();
// String text="abaaabababdgthj";
// String pattern="baba";
KMPTry kmp=new KMPTry();
boolean result=kmp.KMP(text.toCharArray(),pattern.toCharArray());
System.out.println(result);
}
}