LeetCode | 28.找出字符串中第一个匹配项的下标 KMP

这是字符串匹配问题,朴素做法是两重遍历,依次从主串的i位置开始查看是否和模式串匹配,若不匹配就换下一个位置进行判断,直到找到或者遍历完,时间复杂度 O ( m × n ) O(m \times n) O(m×n)

还可以对主串进行处理,把所有匹配模式串的字串替换为"1",然后在替换后的主串里面寻找第一个"1"出现的位置

但是这道题时间复杂度最低的还是得考虑用KMP算法,时间复杂度 O ( m + n ) O(m + n) O(m+n),这里我是看到Youtube上一位博主的讲解才恍然大悟的,链接在这里

python 复制代码
class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if len(needle) == 0:
            return 0
        if len(needle) > len(haystack):
            return -1
        
        next = self.getNext(needle)
        j = 0
        for i in range(len(haystack)):
            while j > 0 and haystack[i] != needle[j]:
                j = next[j-1]
            if haystack[i] == needle[j]:
                j += 1
            if j == len(needle):
                return i - j + 1
        return -1

    def getNext(self, needle):
        next = [0] * len(needle)
        j = 0
        for i in range(1, len(needle)):
            while j > 0 and needle[j] != needle[i]:
                j = next[j-1]
            if needle[j] == needle[i]:
                j += 1
            next[i] = j
        return next

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        restr = haystack.replace(needle, '1')
        for i in range(len(restr)):
            if restr[i] == '1':
                return i
        return -1
相关推荐
敲上瘾3 分钟前
子数组问题——动态规划
java·c++·算法·动态规划
eason_fan10 分钟前
前端手撕代码(bigo)
算法·面试
Hello kele11 分钟前
大型项目,选择conda还是Poetry要点分析
人工智能·python·conda·ai编程·poetry
SmallBambooCode14 分钟前
【人工智能】【Python】在Scikit-Learn中使用KNN(K最近邻算法)
人工智能·python·机器学习·scikit-learn·近邻算法
jaffe—fly17 分钟前
【解决问题】conda 虚拟环境内,`pip list` 展示全局的包
python·conda·pip
带上一无所知的我17 分钟前
解锁Conda:Python环境与包管理的终极指南
开发语言·python·conda
changwan23 分钟前
基于Celery+Supervisord的异步任务管理方案
后端·python·性能优化
君秋水23 分钟前
Python异步编程指南:asyncio从入门到精通(Python 3.10+)
后端·python
302wanger23 分钟前
ARTS-算法-长度最小的子数组
算法
君秋水36 分钟前
FastAPI教程:20个核心概念从入门到 happy使用
后端·python·程序员