/**
*
*
* KMP算法!
*
*/
public class Main2
{
public static void main(String[] args)
{
String str1 = "dd1f dfdddddfdkke dfddkjlkrupieqrqekjrhjskk lkjelr';qkjrqierpeqddf1";
String str2 = "ddf";
char c1[] = new char[str1.length()+1];
char c2[] = new char[str2.length()+1];
c1[0] = (char) str1.length(); c2[0] = (char) str2.length();
System.arraycopy(str1.toCharArray(), 0, c1, 1, c1.length-1);
System.arraycopy(str2.toCharArray(), 0, c2, 1, c2.length-1);
int result = KMP(c1, c2);
if (result != -1) System.out.println("匹配成功,序号为:"+result);
else System.out.println("匹配失败!");
}
private static int KMP(char[] c1, char[] c2)
{
int[]next = new int[c2.length];
getNext(c2, next);
int i = 1, j = 1;
while (i <= c1[0] && j <= c2[0])
{
if (j == 0 || c1[i] == c2[j])
{
i++;
j++;
}
else
j = next[j];
}
if (j > c2[0]) return i - c2[0];
return -1;
}
private static void getNext(char[] c2, int[] next)
{
int start = 0, end = 1;
next[1] = 0;
while(end < c2[0])
{
if (start == 0 || c2[start] == c2[end])
{
start++;
end++;
if (c2[start] != c2[end])next[end] = start;
else next[end] = next[start];
}
else
{
start = next[start];
}
}
}
}
KMP算法优化
最新推荐文章于 2024-08-05 09:05:25 发布