package Others;/*** Implementation of Knuth–Morris–Pratt algorithm* Usage: see the main function for an example*/public class KMP {//a working examplepublic static void main(String[] args) {final String haystack = "AAAAABAAABA"; //This is the full stringfinal String needle = "AAAA"; //This is the substring that we want to findKMPmatcher(haystack, needle);}// find the starting index in string haystack[] that matches the search word P[]public static void KMPmatcher(final String haystack, final String needle) {final int m = haystack.length();final int n = needle.length();final int[] pi = computePrefixFunction(needle);int q = 0;for (int i = 0; i < m; i++) {while (q > 0 && haystack.charAt(i) != needle.charAt(q)) {q = pi[q - 1];}if (haystack.charAt(i) == needle.charAt(q)) {q++;}if (q == n) {System.out.println("Pattern starts: " + (i + 1 - n));q = pi[q - 1];}}}// return the prefix functionprivate static int[] computePrefixFunction(final String P) {final int n = P.length();final int[] pi = new int[n];pi[0] = 0;int q = 0;for (int i = 1; i < n; i++) {while (q > 0 && P.charAt(q) != P.charAt(i)) {q = pi[q - 1];}if (P.charAt(q) == P.charAt(i)) {q++;}pi[i] = q;}return pi;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。