KMP中部分匹配值表求解算法 public int[]kmp(String str){ //定义一个next数组,用于存放字符串的部分匹配值表 int[] next = new int[str.length()]; //因为第一个字符的部分匹配值一定为,故直接令next[0]=0; next[0] = 0; //对字符串进行遍历,得到部分匹配值表 //j表示前i个字符中前后缀相同的个数 for (int i = 1,j=0; i < str.length(); i++) { //当第i个字符和第j个字符不相同时,令j等于第j-1个字符的模式匹配值 //再次比较第j个字符和第i个字符是否相等,若否,则继续令 //j等于第j-1个字符的模式匹配值,继续比较 while(j>0&&str.charAt(j)!=str.charAt(i)){ j = next[j-1]; } //最好理解的一步:j表示前i个字符中前后缀相同的个数 if(str.charAt(i)==str.charAt(j)){ j++; } //将中第i个元素设为j,表示前i个字符中前后缀相同的字串长度为j next[i] = j; } return next; }