public class Kmp { public static void main(String[] args) { String a ="ababababc"; String b ="ababababdfgasdababababcb"; int [] next = kmpnext(a); int res = kmp(b,a,next); System.out.println(res); } private static int kmp(String str, String dest, int[] next) { for (int i = 0,j=0; i <str.length() ; i++) { while(j>0&&str.charAt(i)!=dest.charAt(j)){ j = next[j-1]; } if(str.charAt(i)==dest.charAt(j)){ j++; } if (j==dest.length()){ return i-j+1; } } return 0; } private static int[] kmpnext(String dest) { int[] next = new int[dest.length()]; next[0] = 0; for (int i = 1 ,j = 0; i < dest.length() ; i++) { while(j>0&&dest.charAt(j)!=dest.charAt(i)){ j = next[j-1]; } if(dest.charAt(i)==dest.charAt(j)){ j++; } next[i]= j; } return next; } }
java 字符串匹配算法 KMP 简洁
最新推荐文章于 2022-07-11 15:51:15 发布