美文网首页
KMP(持续理解中...)

KMP(持续理解中...)

作者: 饭板板 | 来源:发表于2020-11-17 13:03 被阅读0次
static void Main()
{
    Console.WriteLine(KMP("1111ababacae22", "ababacae"));
    Console.ReadLine();
}

static int KMP(String s, String t)
{
    int[] next=new int[t.Length];
    int i = 0; 
    int j = 0;
    Getnext(next,t);
    while (i < s.Length && j < t.Length)
    {
        if (j == -1 || s[i] == t[j])
        {
            i++;
            j++;
        }
        else j = next[j];   // j = next[j]。此举意味着失配时,接下来模式串 t 要相对于主串S向右移动j - next [j] 位   ①        
    }
    if (j >= t.Length)
        return (i - t.Length);         //匹配成功,返回子串的位置
    else
        return (-1);                  //没找到
}

// 生成最长前后缀数组
// ababacae
// -1, 0, 0, 1, 2, 3, 0, 1
static void Getnext(int[] next, String t)
{
    int j = 0;
    int k = -1;
    next[0] = -1;

    while (j < t.Length - 1)
    {
        if (k == -1 || t[j] == t[k])
        {
            j++; 
            k++;
            next[j] = k;
        }
        else
        {
            // 当前模式串 k 位置,已经不匹配。但 k 位置之前的子字符串中存在 next[k] 个最长前后缀。
            // 因此,将 k 回溯到 next[k] 处 ②
            k = next[k];  
        }
    }
}

① 的理解
可以理解为:模式串 t 的 k 位置要与主串 s 的 j 位置对齐,用于比较


image.png

=>

image.png

②的理解


image.png

参考文档
https://blog.csdn.net/yyzsir/article/details/89462339

相关文章

  • KMP(持续理解中...)

    ① 的理解可以理解为:模式串 t 的 k 位置要与主串 s 的 j 位置对齐,用于比较image.png => ②...

  • 对KMP算法的一些理解

    最近学到KMP算法,下面讲讲对KMP算法的一些个人理解,希望对大家有帮助! 对于KMP算法的理解: 整个KMP算法...

  • 数据结构与算法14-字符串匹配与KMP

    什么是KMP KMP算法是在字符串匹配算法中比较绕的.主要是需要理解KMP中next数组求解的必要性以及j 的回溯...

  • 字符串匹配问题-KMP算法

    什么是KMP KMP算法是在字符串匹配算法中比较绕的.主要是需要理解KMP中next数组求解的必要性以及j 的回溯...

  • KMP实现

    kmp next数组 理解

  • KMP算法学习札记

    参考文章 知乎:如何更好的理解和掌握 KMP 算法?从头到尾彻底理解KMPKMP 算法(1):如何理解 KMP(原...

  • kmp 算法

    前言: 少 kmp 多学习 0X00 算法板子 831. KMP字符串 感觉还是很难理解

  • 字符串查找匹配--kmp算法

    部分匹配表 KMP的关键是部分匹配表。理解KMP的主要障碍是没有完全掌握部分匹配表中的值到底意味着什么。试着用最简...

  • 字符串匹配: KMP算法

    字符串匹配: KMP算法 学习于 从头到尾彻底理解KMP 结合自己的理解, 本文致力于从简介绍 先给出模板代码v...

  • 理解KMP算法

    简单理解KMP 本文读者可以获得两方面的知识 直观理解如何生成部分匹配表(下文简称匹配表),这是KMP算法的核心思...

网友评论

      本文标题:KMP(持续理解中...)

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