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;
}
}
分享到:
相关推荐
JAVA实现KMP算法,使用java语言实现的kmp算法
Java实现的KMP(Knuth-Morris-Pratt)...综上所述,Java实现的KMP算法是一种优化的字符串匹配算法,通过部分匹配表减少不必要的比较,提高了搜索效率。理解并掌握这一算法对于解决涉及到字符串匹配的问题非常有帮助。
Java实现KMP算法 KMP算法是字符串匹配算法中的一种,用于在一个主串中查找一个模式串的出现位置。该算法的主要思想是预处理模式串,计算其最长公共前后缀数组(Longest Proper Prefix which is also Suffix,简称 ...
java实现的kmp算法,参照原论文实现的,希望能有用
KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。
* Java实现KMP算法 * * 思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针, * 而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远 * 的一段距离后,继续进行比较。 * * 时间复杂度O...
kmp算法
《KMP算法与Java实现详解》 在计算机科学中,字符串搜索算法是处理文本和数据的重要工具,其中KMP(Knuth-Morris-Pratt)算法因其高效性和实用性而备受青睐。KMP算法是由Donald Knuth、Vaughan Pratt和James H. ...
在Java中实现KMP算法,我们需要理解其核心思想和步骤。 1. **KMP算法的核心思想**: - KMP算法的关键在于构造一个部分匹配表(也称为失配表),它记录了当模式串在某个位置不匹配时,如何利用已知的信息避免回溯。...
下面我们将详细探讨KMP算法的原理、Java实现以及“next”数组的计算方法。 ### KMP算法原理 1. **模式匹配问题**:给定一个文本串s和一个模式串p,我们需要找出模式串在文本串中的所有出现位置。 2. **next数组**...
### Java 实现 KMP 算法详解 #### KMP 算法概述 KMP 算法是由 Donald Knuth、James H. Morris 和 Vaughan Pratt 共同发明的一种高效字符串匹配算法。它通过预处理模式串来提高匹配效率,避免了传统模式匹配算法在...
KMP算法实现,用Java语言实现的KMP字符串匹配算法
在这个"数据结构KMP算法配图详解"中,我们将深入探讨该算法的原理、实现以及它在C语言和Java中的具体应用。 1. KMP算法概述: KMP算法由D.E. Knuth、V.R. Morris和J.H. Pratt于1970年提出,它的核心思想是避免对已...
KMP算法的JAVA实现
在深入探讨Java实现细节之前,我们先来了解一下KMP算法的基本原理: 1. **前缀表(next 数组)**:KMP算法的核心在于一个辅助数组`next[]`,该数组用于记录模式串T的所有前缀与后缀的最长公共前缀长度。例如,对于...
这段代码可作为理解KMP算法实现的参考。 总的来说,KMP算法是字符串匹配问题中的一种高效解决方案,通过预处理和智能指针移动策略,有效地减少了不必要的比较次数,提高了匹配速度。在实际编程和应用中,了解并掌握...
在Java中实现KMP算法,首先需要初始化`next`数组,然后进行字符串匹配。以下是一个简单的Java实现: ```java public class KMP { static String str = "1kk23789456789hahha"; static String ch = "789"; static...
欢迎讨论
在Java中实现KMP算法,我们需要理解以下几个关键概念: 1. **部分匹配表(Partial Match Table)**:这是KMP算法的核心,用于存储字符串的前缀和后缀的最大公共长度。通过预处理输入字符串,我们可以得到一个数组,...
kmp算法 KMP算法是什么? 引用自百度百科: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配...