`

KMP 字符串匹配

 
阅读更多

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字符串匹配算法 #### 一、简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串搜索算法,由Donald Knuth、James H. Morris和Vaughan Pratt三位计算机科学家共同提出。该算法的主要优点在于它能够有效地...

    KMP字符串匹配算法

    **KMP字符串匹配算法详解** KMP(Knuth-Morris-Pratt)字符串匹配算法是由D.E. Knuth、V.J. Morris和J.H. Pratt三位学者于1977年提出的,它是一种高效的字符串搜索算法,主要用于在一个主串(text)中查找是否存在...

    kmp字符串匹配

    KMP字符串匹配算法 KMP字符串匹配算法是当前最快的字符串匹配算法之一,由Donald Knuth、Vaughan Pratt和Morris在1977年共同发明。该算法的优点在于可以在O(n)的时间复杂度下实现字符串匹配,具有高效、快速和准确...

    KMP字符串匹配

    总之,KMP字符串匹配算法是字符串搜索领域的一个经典方法,通过构造部分匹配表优化了比较过程,避免了无效的回溯,提高了查找效率。在实际编程中,理解并熟练运用KMP算法,能有效解决大量字符串处理问题。

    KMP字符串匹配算法C语言实现[参考].pdf

    KMP字符串匹配算法C语言实现 KMP字符串匹配算法是一种高效的字符串匹配算法,它的主要思想是通过构建前缀表(prefix)来避免不必要的比较操作。该算法由Donald Knuth、Vaughan Pratt和Morris在1977年首次提出。 在...

    字符串匹配的KMP算法.rar_KMP_KMP算法_kmp 字符串匹配_字符串匹配_文件

    总的来说,KMP算法是一种高效的字符串匹配方法,它通过避免不必要的字符比较和回溯,大大提高了搜索效率。理解并掌握KMP算法,对于从事编程和相关领域的专业人士来说,是提高工作效率和解决问题的关键技能之一。

    KMP.rar_KMP_kmp 字符串匹配_kmp失效函数_字符串匹配

    KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者在1970年代提出。该算法的核心在于利用已知的前缀和后缀信息,避免了在匹配过程中...

    KMP字符串模式匹配算法ppt

    KMP(Knuth-Morris-Pratt)字符串模式匹配算法是一种高效的字符串搜索算法,由D.M. Knuth、V. Morris和J.H. Pratt在1970年提出。该算法避免了简单匹配算法中的不必要的回溯,显著提高了在文本字符串中查找模式字符串...

    KMP 字符串模式匹配详解

    在简单的字符串匹配算法中,我们从主串的第一个字符开始,依次与子串的第一个字符进行比较。如果匹配失败,主串的指针回溯一位,子串的指针重置到首位,然后继续比较。这种算法的时间复杂度为O(m*n),其中m为主串...

    带通配符的字符串匹配算法

    在IT领域,字符串匹配是计算机科学中的一个基本问题,尤其在文本处理、数据搜索和模式识别等场景中广泛应用。带通配符的字符串匹配算法则是这个领域的延伸,它允许在模式字符串中包含特殊字符,如星号(*)或问号(?),...

    用python语言实现的KMP字符串匹配算法

    首先构建部分匹配表,然后在文本串中匹配模式串。如果匹配成功,则返回模式串在文本串中的起始索引;否则返回-1。在测试代码中,我们测试了一个文本串和一个模式串的匹配情况。如果匹配成功,则输出模式串在文本串中...

    kmpC语言实现 字符串匹配 算法

    ### KMP字符串匹配算法及其C语言实现 #### KMP算法简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和Vaughan Pratt共同提出。该算法的核心思想是在模式串(需要...

    KMP(字符串匹配)算法总结

    ### KMP(字符串匹配)算法总结 #### 第一部分:KMP算法初解 ##### 1、普通字符串匹配BF算法与KMP算法的时间复杂度比较 KMP算法是一种高效的字符串匹配算法,它对基本的BF算法进行了优化。对于给定的原始串`S`和...

    swift-OC的字符串匹配库.包含KMP匹配AC多模字符串匹配.

    这里我们将深入探讨标题和描述中提到的“KMP匹配”和“AC多模字符串匹配”,以及它们在Swift开发中的应用。 首先,我们来看“KMP匹配算法”。全称为Knuth-Morris-Pratt算法,它是一种高效的字符串查找算法,能够在...

    如何用KMP字符串匹配算法求出主串中所包含模式串的总个数

    如何用KMP字符串匹配算法求出主串中所包含模式串的总个数 #include using namespace std; void getnext(int next[],string s,int len) { int j=0,k=-1; next[0]=-1; while(j&lt;len){ if(k==-1||s[j]==s[k]){ j...

    python3 kmp 字符串匹配的方法

    总结一下,Python3 KMP字符串匹配方法是通过预处理模式串的next数组,有效地减少了不必要的字符比较,提高了匹配效率。其核心在于计算next数组并据此调整模式串在匹配失败时的移动方式。这个方法不仅适用于Python,...

    CUDA程序并行实现字符串匹配的操作

    例如,在KMP算法中,每个线程检查目标字符串的一个子串是否与模式字符串匹配。 3. **KMP算法**:KMP算法是一种高效的串匹配算法,它避免了对已比较过的字符的重复比较。通过构建部分匹配表,KMP可以提前知道在发生...

    KMP字符串模式匹配算法

    KMP字符串模式匹配算法是一种高效的字符串搜索算法,由D.E.Knuth、V.R.Morris和J.W.Pratt三位学者提出,因此得名KMP算法。该算法避免了在匹配过程中不必要的字符回溯,提高了匹配效率。下面我们将深入探讨KMP算法的...

Global site tag (gtag.js) - Google Analytics