public int[] computePrefix(char[] p)
{
int i, n, k;
n = p.length;
int[] next = new int[n];
next[1] = next[0] = 0;
k = next[1];
for (i = 2; i <= n - 1; i++) {
for (; k != 0 && p[k] != p[i-1]; k = next[k]);
if (p[k] == p[i-1]) k++;
next[i] = k;
}
return next;
}
public int contains(String src,String pattern){
int srcLength = src.length();
int patternLength = pattern.length();
int s = 0;
int p = 0;
int k = 0;
int[] next = computePrefix(pattern.toCharArray());
char[] srcChars = src.toCharArray();
char[] patternChars = pattern.toCharArray();
while(s < srcLength){
for(p = next[p];p < patternLength && srcChars[s] == patternChars[p];p ++ ,s ++);
if(p == 0){
s++;
}else if(p == patternLength){
return s - p;
}
}
return -1;
}
public static void main(String[] orgs) {
KMP bf = new KMP();
System.out.println(bf.contains("123123445233423", "4452"));
}
KMP
最新推荐文章于 2024-11-16 09:45:51 发布