KMP算法实现
Posted wangweizu99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法实现相关的知识,希望对你有一定的参考价值。
KMP算法实现
package com.wwz.kmp;
import java.util.Arrays;
public class KmpDeom {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String str1="a abcdabd";
String str2="abcdabd";
int[] a=getNext(str2);
System.out.println(Arrays.toString(a));
System.out.println(kmp(str1, str2));
}
//kmp算法的代码实现
public static int kmp(String str1,String str2) {
int[] next=getNext(str2);
int i=0;
for(int j=0;i<str1.length();i++) {
while(j>0&&str1.charAt(i)!=str2.charAt(j))
j = next[j-1];
if(str1.charAt(i)==str2.charAt(j)) {
j++;
}
if(j==str2.length())
return i-j+1;
}
return -1;
}
//得到子串的next数组
public static int[] getNext(String str2) {
int[] next=new int[str2.length()];
next[0]=0;
for(int i=1,j=0;i<str2.length();++i) {
while(j>0&&str2.charAt(i)!=str2.charAt(j))
j = next[j-1];
if(str2.charAt(i)==str2.charAt(j))
j++;
next[i]=j;
}
return next;
}
}
以上是关于KMP算法实现的主要内容,如果未能解决你的问题,请参考以下文章