package kmpDemo;
import java.util.Arrays;
/**
* kmp算法,查看字符串str1中是否存在字符串str2,若存在,返回第一次出现的第一个字符的下标
*/
public class Kmp {
public static void main(String[] args) {
String str1 = "mississippi";
String str2 = "issip";
int voer = kmp(str1,str2);
System.out.println(voer);
// System.out.println("" + Arrays.toString(kmpTable(str2)));
}
public static int kmp(String str1,String str2){
int[] kmptable1 = kmpTable(str2);
for (int i = 0,j = 0;i < str1.length(); i++) {
while (j > 0 && str1.charAt(i) != str2.charAt(j)){
j = kmptable1[j - 1];
}
if (str1.charAt(i) == str2.charAt(j)){
j++;
}
if (j == str2.length()){
return i - j + 1;
}
}
return -1;
}
//返回一个字符串的部分匹配值以数组的形式返回
public static int[] kmpTable(String str){
//返回的数组
int[] reint = new int[str.length()];
for (int i = 1,j = 0; i < str.length() ; i++) {
while(j > 0 && str.charAt(i) != str.charAt(j)){//kmp的核心点
j = reint[j - 1];
}
if (str.charAt(i) == str.charAt(j)){
j++;
}
reint[i] = j;
}
return reint;
}
}
kmp字符串的匹配算法
最新推荐文章于 2024-07-24 22:13:06 发布