KMP算法
发布时间:2020-12-15 07:58:10 所属栏目:Java 来源:网络整理
导读:public class KMP { /** * Determines whether the source string and pattern string are equal. * * @param source the source string * @param pattern the pattern string * @return Returns -1 if it does not match,and the index of the * first matc
public class KMP { /** * Determines whether the source string and pattern string are equal. * * @param source the source string * @param pattern the pattern string * @return Returns -1 if it does not match,and the index of the * first matching character in the source string if it does */ public static int match(String source,String pattern) { if (source == null || pattern == null) return -1; if (source.length() == 0 && pattern.length() == 0) return -1; int[] next = getNext(pattern); int i = 0,j = 0; while (i < source.length() && j < pattern.length()) { // When j is -1,it means that we need to move // the main string,and j + 1 happens to be 0 if (j == -1 || source.charAt(i) == pattern.charAt(j)) { i++; j++; } else { j = next[j]; } } return (j == pattern.length() ? i - j : -1); } /** * Get the next array of the pattern string. * * @param pattern * @return */ public static int[] getNext(String pattern) { if (pattern == null || pattern.length() == 0) return null; int[] next = new int[pattern.length()]; int j = 0,k = -1; next[0] = -1; while (j < pattern.length() - 1) { if (k == -1 || pattern.charAt(j) == pattern.charAt(k)) { if (pattern.charAt(++j) == pattern.charAt(++k)) { next[j] = next[k]; } else { next[j] = k; } } else { k = next[k]; } } return next; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |