KMP算法

作者: poteman | 来源:发表于2021-09-08 14:14 被阅读0次
class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if needle == '':
            return 0
        m = len(haystack)
        n = len(needle)
        if n > m:
            return -1
        prefix = self.get_prefix(needle)
        i = 0
        j = 0
        while i < m:
            # 匹配上的情况下i,j各加一
            if haystack[i] == needle[j]:
                i += 1
                j += 1
                if j == n:
                    return i - j
            else:
                # 不匹配的情况下,j发生变化,利用prefix
                j = prefix[j]
                # 变化之后判断j是否为-1,若为-1,j从0开始,i移动到下一位
                if j == -1:
                    j = 0
                    i += 1
        return -1

    def get_prefix(self, p):
        n = len(p)
        prefix = [0] * n
        l = 0
        i = 1
        while i < n:
            if p[i] == p[l]: # 相等
                l += 1
                prefix[i] = l
                i += 1
            else: # 不相等
                if l > 0: # l > 0
                    l = prefix[l-1]
                else: # l < 0
                    prefix[i] = 0
                    i += 1
        # 头部加-1,删掉最后一个元素
        prefix = [-1] + prefix[:-1]
        return prefix
```

- 参考资料: 
[灯笼哥](https://www.bilibili.com/video/BV1Px411z7Yo/?spm_id_from=333.788.recommend_more_video.0)

相关文章

  • KMP 专题整理

    KMP 学习记录 kuangbin专题十六——KMP KMP 学习总结 朴素 KMP 算法 拓展 KMP 算法(E...

  • 对KMP算法的一些理解

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

  • KMP算法文章合集

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

  • 串的模式匹配算法

    KMP算法 算法匹配

  • 问答|KMP算法学习笔记

    问题 目录KMP是什么,做什么用的KMP算法的高效体现在哪如何KMP算法的next数组KMP的代码KMP的时间复杂...

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

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

  • 字符串匹配 - KMP算法

    前面我们介绍非常高效的 BM 算法,今天我们介绍另一个非常出名且高效的 KMP 算法。 KMP 算法思想 KMP ...

  • KMP算法及优化

    转载请注明出处: KMP算法及优化 今天看到同学在复习数据结构书上的KMP算法,忽然发觉自己又把KMP算法忘掉了,...

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

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

  • KMP算法

    KMP算法

网友评论

      本文标题:KMP算法

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