public class KMP {
public static int KMP(String S,String P){
int[] next=getNext(P);
char[] sarr=S.toCharArray();
char[] parr=P.toCharArray();
int slen=S.length();
int plen=P.length();
int sp=0;
int pp=0;
while(sp<slen&&pp<plen){
if(pp==-1||sarr[sp]==parr[pp]){
sp++;
pp++;
}else{
pp=next[pp];
}
}
if(pp==plen){
return sp-pp;
}else{
return -1;
}
}
private static int[] getNext(String s1){
int len=s1.length();
int[] next=new int[len];
if(len==0) return next;
char[] arr=s1.toCharArray();
next[0]=-1;
int i=0;
int j=-1;
while(i<len-1){
if(j==-1||arr[i]==arr[j]){
next[++i]=++j;
}else{
j=next[j];
}
}
return next;
}
public static void main(String[] args) {
String a="abcabcdaaaa";
String p="abcd";
System.out.println(KMP(a,p));
}
}
KMP算法实现java
最新推荐文章于 2024-08-16 20:04:59 发布