package ten_algorithm.kmp;
import ten_algorithm.dynamic.KnapSack;
import java.util.Arrays;
/**
* Author:jinpma
* Date :2019/12/28
*/
public class KmpSearch
{
public static void main(String[] args)
{
String str1 = "BBC ABCDAB ABCDABCDABDE";
String str2 = "ABCDABD";
KmpSearch k = new KmpSearch();
int[] next = k.next(str2);
int index = k.findIndex(str1, str2, next);
System.out.println(index);
}
private int findIndex(String str1, String str2, int[] next)
{
int i, j;
for (i = 0, j = 0; i < str1.length(); i++)
{
if (str1.charAt(i) == str2.charAt(j))
{
j++;
} else
{
if (j > 0)//一开始若不==,j==0,j-1报错
{
i = (i - j) + (j - next[j - 1]) - 1;//会有i++
j = 0;
}
}
if (j == str2.length())
{
return i - j + 1;
}
}
return -1;
}
public int[] next(String str2)
{
int next[] = new int[str2.length()];
next[0] = 0;
int i, j;
for (i = 1, j = 0; i < str2.length(); i++)
{
if (str2.charAt(i) == str2.charAt(j))
{
j++;
} else
{
j = 0;
}
next[i] = j;
}
return next;
}
}
来源:CSDN
作者:tmax52HZ
链接:https://blog.csdn.net/tmax52HZ/article/details/103792733