public class KMPProcess {
public static void buildNext(String str, int[] next) {
if (str == null || next == null || str.length() != next.length)
throw new IllegalArgumentException();
int i = 0;
int k;
next[i] = k = -1;
while (i < str.length() - 1) {
if (k == -1 || str.charAt(i) == str.charAt(k)) {
i ++;
k ++;
next[i] = k;
} else {
k = next[k];
}
}
}
public static void main(String[] args) {
String target = "dabc";
String source = "acdfffabcafdddabcac";
int[] next = new int[target.length()];
buildNext(target, next);
int sourceIndex = 0;
int targetIndex = 0;
while (sourceIndex < source.length() && targetIndex < target.length() ) {
if (source.charAt(sourceIndex) == target.charAt(targetIndex)) {
sourceIndex ++;
targetIndex ++;
} else if (targetIndex == 0) {
sourceIndex ++;
} else {
targetIndex = next[targetIndex];
System.out.println("targetIndex=" + targetIndex);
}
}
System.out.println("source length = " + source.length() + " , sourceIndex = " + sourceIndex);
System.out.println("target length = " + target.length() + " , targetIndex = " + targetIndex);
if (targetIndex == target.length()) {
System.out.println("index : " + (sourceIndex - target.length()));
}
}
}
分享到:
相关推荐
### KMP字符串匹配算法 #### 一、简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串搜索算法,由Donald Knuth、James H. Morris和Vaughan Pratt三位计算机科学家共同提出。该算法的主要优点在于它能够有效地...
**KMP字符串匹配算法详解** KMP(Knuth-Morris-Pratt)字符串匹配算法是由D.E. Knuth、V.J. Morris和J.H. Pratt三位学者于1977年提出的,它是一种高效的字符串搜索算法,主要用于在一个主串(text)中查找是否存在...
KMP字符串匹配算法 KMP字符串匹配算法是当前最快的字符串匹配算法之一,由Donald Knuth、Vaughan Pratt和Morris在1977年共同发明。该算法的优点在于可以在O(n)的时间复杂度下实现字符串匹配,具有高效、快速和准确...
总之,KMP字符串匹配算法是字符串搜索领域的一个经典方法,通过构造部分匹配表优化了比较过程,避免了无效的回溯,提高了查找效率。在实际编程中,理解并熟练运用KMP算法,能有效解决大量字符串处理问题。
KMP字符串匹配算法C语言实现 KMP字符串匹配算法是一种高效的字符串匹配算法,它的主要思想是通过构建前缀表(prefix)来避免不必要的比较操作。该算法由Donald Knuth、Vaughan Pratt和Morris在1977年首次提出。 在...
总的来说,KMP算法是一种高效的字符串匹配方法,它通过避免不必要的字符比较和回溯,大大提高了搜索效率。理解并掌握KMP算法,对于从事编程和相关领域的专业人士来说,是提高工作效率和解决问题的关键技能之一。
KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者在1970年代提出。该算法的核心在于利用已知的前缀和后缀信息,避免了在匹配过程中...
KMP(Knuth-Morris-Pratt)字符串模式匹配算法是一种高效的字符串搜索算法,由D.M. Knuth、V. Morris和J.H. Pratt在1970年提出。该算法避免了简单匹配算法中的不必要的回溯,显著提高了在文本字符串中查找模式字符串...
在简单的字符串匹配算法中,我们从主串的第一个字符开始,依次与子串的第一个字符进行比较。如果匹配失败,主串的指针回溯一位,子串的指针重置到首位,然后继续比较。这种算法的时间复杂度为O(m*n),其中m为主串...
在IT领域,字符串匹配是计算机科学中的一个基本问题,尤其在文本处理、数据搜索和模式识别等场景中广泛应用。带通配符的字符串匹配算法则是这个领域的延伸,它允许在模式字符串中包含特殊字符,如星号(*)或问号(?),...
首先构建部分匹配表,然后在文本串中匹配模式串。如果匹配成功,则返回模式串在文本串中的起始索引;否则返回-1。在测试代码中,我们测试了一个文本串和一个模式串的匹配情况。如果匹配成功,则输出模式串在文本串中...
### KMP字符串匹配算法及其C语言实现 #### KMP算法简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和Vaughan Pratt共同提出。该算法的核心思想是在模式串(需要...
### KMP(字符串匹配)算法总结 #### 第一部分:KMP算法初解 ##### 1、普通字符串匹配BF算法与KMP算法的时间复杂度比较 KMP算法是一种高效的字符串匹配算法,它对基本的BF算法进行了优化。对于给定的原始串`S`和...
这里我们将深入探讨标题和描述中提到的“KMP匹配”和“AC多模字符串匹配”,以及它们在Swift开发中的应用。 首先,我们来看“KMP匹配算法”。全称为Knuth-Morris-Pratt算法,它是一种高效的字符串查找算法,能够在...
如何用KMP字符串匹配算法求出主串中所包含模式串的总个数 #include using namespace std; void getnext(int next[],string s,int len) { int j=0,k=-1; next[0]=-1; while(j<len){ if(k==-1||s[j]==s[k]){ j...
总结一下,Python3 KMP字符串匹配方法是通过预处理模式串的next数组,有效地减少了不必要的字符比较,提高了匹配效率。其核心在于计算next数组并据此调整模式串在匹配失败时的移动方式。这个方法不仅适用于Python,...
例如,在KMP算法中,每个线程检查目标字符串的一个子串是否与模式字符串匹配。 3. **KMP算法**:KMP算法是一种高效的串匹配算法,它避免了对已比较过的字符的重复比较。通过构建部分匹配表,KMP可以提前知道在发生...
KMP字符串模式匹配算法是一种高效的字符串搜索算法,由D.E.Knuth、V.R.Morris和J.W.Pratt三位学者提出,因此得名KMP算法。该算法避免了在匹配过程中不必要的字符回溯,提高了匹配效率。下面我们将深入探讨KMP算法的...