美文网首页
【算法】字符串查询KMP算法代码实现

【算法】字符串查询KMP算法代码实现

作者: 王月亮17 | 来源:发表于2024-04-01 18:53 被阅读0次

题目

找到模式串在主串中的位置,没有返回-1。

原理

不回溯主串,通过计算步长后移子串的方式快速查找字符串,将时间复杂度控制到O(n)。
主要原理是,先在子串中找到所有重复的更小子串,并在重复的后面的子串的最后一位的下标记录子串长度。当与主串匹配出现不一致时,后移失配的前一个下标对应步长,然后继续进行匹配。

代码

public static void main(String[] args) {
    char[] str = "ABCABCAABCABCD".toCharArray();
    char[] pattern = "ABCABCD".toCharArray();
    int[] next = new int[pattern.length];
    getNext(pattern, next);
    System.out.println(Arrays.toString(next));
    int result = searchString(str, pattern, next);
    System.out.println(result);
}

private static int searchString(char[] str, char[] pattern, int[] next) {
    int i = 0;
    int j = 0;
    while (i < str.length && j < pattern.length) {
        if (str[i] == pattern[j]) {
            i++;
            j++;
        } else {
            j = next[j - 1];
        }
    }
    if (j == pattern.length) {
        return i - j;
    }
    return -1;
}

private static void getNext(char[] pattern, int[] next) {
    int i = 1, j = 0; // 分别从模式串的0和1开始寻找重复子串
    while (i < pattern.length) {
        if (pattern[i] == pattern[j]) { // 如果相同
            next[i] = j + 1; // 步长数组中的i对应值设置为j+1
            i++; 
            j++; // 自增i和j
        } else { // 不相同时
            i++; // 自增i
            j = 0; // 重置j
        }
    }
}

相关文章

  • 字符串匹配与KMP算法

    1.朴素字符串匹配算法 2.KMP算法 求前缀函数 实现KMP算法 3.测试代码

  • 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。 ...

  • KMP算法

    KMP算法是解决字符串匹配问题的有高效算法 代码:

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • KMP算法——寻找子串位置

    KMP算法——寻找子串位置 1、KMP算法简介: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • 日常笔记

    字符串匹配的KMP算法和朴素算法,及其python实现 http://blog.csdn.net/chinwufo...

  • 字符串匹配算法总结

    面写过一篇字符串匹配算法,总共涉及BF算法,RK算法,BM算法,还有一种算法是KMP算法。这几种算法思想和代码我都...

  • KMP算法(字符串匹配问题)

    一、是什么? 注意,是KMP算法,不是MMP哈,我没有骂人。KMP算法是用来做字符串匹配的,除了KMP算法分,还有...

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • KMP算法理解

    文章大纲:1.KMP算法概念2.KMP算法中最核心的next[] 数组是如何生成的3.使用KMP算法 匹配字符串 ...

网友评论

      本文标题:【算法】字符串查询KMP算法代码实现

      本文链接:https://www.haomeiwen.com/subject/obyitjtx.html