java实现的KMP算法
2013-01-14 11:48
281 查看
public class KMPAlgorithm {
/**
* 计算模式串的next函数
*
* @param desStr
* 模式串
* @return 模式串的next函数,用数组来保存
*/
private static int[] kmpNext(String desStr) {
int len = desStr.length();
int i = 0;
int j = -1;
int next[] = new int[len];
while (i < len - 1) {
if (j == -1 || (desStr.charAt(i) == (desStr.charAt(j)))) {
i++;
j++;
if (desStr.charAt(i) !=
(desStr.charAt(j))) {
next[i] = (j + 1);
} else {
next[i] = next[j];
}
} else {
j = (next[j] - 1);
}
}
return next;
}
/**
* kmp的核心算法
*
* @param sourceStr
* @param desStr
* @param pos
* 从主串的第几个字符开始匹配
* @return 成功的话返回位置,失败的话返回-1,索引从0开始的
*/
public static int index(String sourceStr, String desStr, int pos) {
int next[] = kmpNext(desStr);
int i = 0;
int j = 0;
while (i < sourceStr.length() - 1 && j < desStr.length() -
1) {
if (j == 0 || (sourceStr.charAt(i) == desStr.charAt(j))) {
i++;
j++;
} else
j = (next[j] - 1);
}
if (j > desStr.length() - 2) {
return (i - desStr.length() + 1);
} else
return -1;
}
}
/**
* 计算模式串的next函数
*
* @param desStr
* 模式串
* @return 模式串的next函数,用数组来保存
*/
private static int[] kmpNext(String desStr) {
int len = desStr.length();
int i = 0;
int j = -1;
int next[] = new int[len];
while (i < len - 1) {
if (j == -1 || (desStr.charAt(i) == (desStr.charAt(j)))) {
i++;
j++;
if (desStr.charAt(i) !=
(desStr.charAt(j))) {
next[i] = (j + 1);
} else {
next[i] = next[j];
}
} else {
j = (next[j] - 1);
}
}
return next;
}
/**
* kmp的核心算法
*
* @param sourceStr
* @param desStr
* @param pos
* 从主串的第几个字符开始匹配
* @return 成功的话返回位置,失败的话返回-1,索引从0开始的
*/
public static int index(String sourceStr, String desStr, int pos) {
int next[] = kmpNext(desStr);
int i = 0;
int j = 0;
while (i < sourceStr.length() - 1 && j < desStr.length() -
1) {
if (j == 0 || (sourceStr.charAt(i) == desStr.charAt(j))) {
i++;
j++;
} else
j = (next[j] - 1);
}
if (j > desStr.length() - 2) {
return (i - desStr.length() + 1);
} else
return -1;
}
}
相关文章推荐
- 对KMP的理解,以及kmp算法java版本实现
- KMP算法的JAVA实现
- KMP算法java实现
- KMP算法实现-java版
- 字符串匹配——KMP算法的Java实现
- Java实现KMP算法
- KMP算法java实现
- KMP算法Java实现
- KMP算法(java实现)
- KMP算法-Java实现
- Java实现KMP算法
- 7、KMP算法实现--Java代码
- Java实现KMP算法
- 字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
- KMP算法部分匹配值计算-Java实现
- java实现子字符串的KMP算法
- KMP算法的Java实现(基于阮一峰的博客)
- Java实现KMP算法
- KMP算法java实现
- java实现的kmp算法