`

java实现的KMP算法

    博客分类:
  • Java
阅读更多

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算法

    java实现KMP算法

    Java实现的KMP(Knuth-Morris-Pratt)...综上所述,Java实现的KMP算法是一种优化的字符串匹配算法,通过部分匹配表减少不必要的比较,提高了搜索效率。理解并掌握这一算法对于解决涉及到字符串匹配的问题非常有帮助。

    Java实现KMP算法.docx

    Java实现KMP算法 KMP算法是字符串匹配算法中的一种,用于在一个主串中查找一个模式串的出现位置。该算法的主要思想是预处理模式串,计算其最长公共前后缀数组(Longest Proper Prefix which is also Suffix,简称 ...

    kMP算法JavakMP算法JavakMP算法JavakMP算法Java

    下面我们将详细探讨KMP算法的原理、Java实现以及“next”数组的计算方法。 ### KMP算法原理 1. **模式匹配问题**:给定一个文本串s和一个模式串p,我们需要找出模式串在文本串中的所有出现位置。 2. **next数组**...

    java实现的kmp算法

    java实现的kmp算法,参照原论文实现的,希望能有用

    Kmp算法Java实现源码

    KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。

    Java实现KMP算法

    * Java实现KMP算法 * * 思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针, * 而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远 * 的一段距离后,继续进行比较。 * * 时间复杂度O...

    java实现kmp算法.md

    kmp算法

    kmp算法-基于Java实现kmp字符串搜索算法.zip

    《KMP算法与Java实现详解》 在计算机科学中,字符串搜索算法是处理文本和数据的重要工具,其中KMP(Knuth-Morris-Pratt)算法因其高效性和实用性而备受青睐。KMP算法是由Donald Knuth、Vaughan Pratt和James H. ...

    kmp算法-基于Java实现的kmp算法.zip

    在Java中实现KMP算法,我们需要理解其核心思想和步骤。 1. **KMP算法的核心思想**: - KMP算法的关键在于构造一个部分匹配表(也称为失配表),它记录了当模式串在某个位置不匹配时,如何利用已知的信息避免回溯。...

    Java KMP算法实现(源代码)

    ### Java 实现 KMP 算法详解 #### KMP 算法概述 KMP 算法是由 Donald Knuth、James H. Morris 和 Vaughan Pratt 共同发明的一种高效字符串匹配算法。它通过预处理模式串来提高匹配效率,避免了传统模式匹配算法在...

    KMP算法Java实现

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

    KMP算法_KMP算法_

    下面是一个简单的Java实现KMP算法的例子: ```java public class KMP { private int[] computePrefixFunction(String pattern) { // 计算部分匹配表 int[] pi = new int[pattern.length()]; for (int i = 1, j...

    数据结构KMP算法配图详解

    在这个"数据结构KMP算法配图详解"中,我们将深入探讨该算法的原理、实现以及它在C语言和Java中的具体应用。 1. KMP算法概述: KMP算法由D.E. Knuth、V.R. Morris和J.H. Pratt于1970年提出,它的核心思想是避免对已...

    KMP算法的JAVA实现

    KMP算法的JAVA实现

    KMP算法 java版

    在深入探讨Java实现细节之前,我们先来了解一下KMP算法的基本原理: 1. **前缀表(next 数组)**:KMP算法的核心在于一个辅助数组`next[]`,该数组用于记录模式串T的所有前缀与后缀的最长公共前缀长度。例如,对于...

    KMP算法实验报告.docx

    这段代码可作为理解KMP算法实现的参考。 总的来说,KMP算法是字符串匹配问题中的一种高效解决方案,通过预处理和智能指针移动策略,有效地减少了不必要的比较次数,提高了匹配速度。在实际编程和应用中,了解并掌握...

    JAVA实现KMP算法理论和示例代码

    在Java中实现KMP算法,首先需要初始化`next`数组,然后进行字符串匹配。以下是一个简单的Java实现: ```java public class KMP { static String str = "1kk23789456789hahha"; static String ch = "789"; static...

    KMP算法java实现

    欢迎讨论

    kmp算法的Java实现.zip

    在Java中实现KMP算法,我们需要理解以下几个关键概念: 1. **部分匹配表(Partial Match Table)**:这是KMP算法的核心,用于存储字符串的前缀和后缀的最大公共长度。通过预处理输入字符串,我们可以得到一个数组,...

Global site tag (gtag.js) - Google Analytics