java版的KMP算法 欢迎吐槽

来源:互联网 发布:java执行shell命令 编辑:程序博客网 时间:2024/06/03 07:18
public class kmp{static int KMP(String S,String T, int pos){if(S.length() < T.length()){return -1;}char[] s = new char[S.length()];char[] t = new char[T.length()];for(int k = 0; k < S.length(); k++){s[k] = S.charAt(k);}for(int k = 0; k < T.length(); k++){t[k] = T.charAt(k);}int[] next = new int[T.length()];GetNextArray(T, next);int i, j;for(i = pos, j = 0; i < S.length() && j < T.length(); ){if(-1 == j || s[i] == t[j]){++i;++j;}else{j = next[j];}}if(j >= T.length()){return i - T.length();}else{return -1;}} static void  GetNextArray(String str, int next[]){char[] s = new char[str.length()];for(int k = 0; k < str.length(); k++){s[k] = str.charAt(k);}next[0] = -1;for(int i = 0, j = -1; i < str.length() - 1; ){if(-1 == j ||s[i] == s[j]){++i;++j;next[i] = j;}else{j = next[j];}}}}