力扣代码学习日记二

这篇具有很好参考价值的文章主要介绍了力扣代码学习日记二。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem: 28. 找出字符串中第一个匹配项的下标

思路

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:

输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 06 处匹配。
第一个匹配项的下标是 0 ,所以返回 0

示例 2:

输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1

提示:

1 <= haystack.length, needle.length <= 104
haystack 和 needle 仅由小写英文字符组成

解题方法

  • 可以使用 Python 内置的字符串方法 find() 来实现这个功能。find() 方法返回子字符串在字符串中第一次出现的位置,如果没有找到则返回 -1。
  • KMP算法

复杂度

时间复杂度:

O(N*M),其中 N 是字符串 haystack 的长度,M 是字符串 needle 的长度。在最坏的情况下,即 needle 与 haystack 的每个子串都几乎相同,但最后一个字符不匹配时,需要对 haystack 的每个位置都尝试匹配 needle,并且每次匹配都需要比较 M 个字符。

空间复杂度:

O(1)。使用 find() 方法进行搜索不需要额外的存储空间,所需空间不随输入数据的大小而改变,因此是常数级别的。

代码

class Solution(object):
    def strStr(self, haystack, needle):
        return haystack.find(needle)

使用KMP算法(目前能力还看不懂)

class Solution(object):
    def strStr(self, haystack, needle):
        if not needle:
            return 0
    
        def build_lps(pattern):
            lps = [0] * len(pattern)
            j = 0
            for i in range(1, len(pattern)):
                while j > 0 and pattern[i] != pattern[j]:
                    j = lps[j - 1]
                if pattern[i] == pattern[j]:
                    j += 1
                lps[i] = j
            return lps
    
        lps = build_lps(needle)
        j = 0
        for i in range(len(haystack)):
            while j > 0 and haystack[i] != needle[j]:
                j = lps[j - 1]
            if haystack[i] == needle[j]:
                j += 1
            if j == len(needle):
                return i - j + 1
        return -1

KMP算法的时间复杂度为O(N+M),其中N是haystack的长度,M是needle的长度文章来源地址https://www.toymoban.com/news/detail-829859.html

到了这里,关于力扣代码学习日记二的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣代码学习日记五

    Problem: 283. 移动零 给定一个数组 nums ,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 示例 2: 提示 : 1 = nums.length = 104 -231 = nums[i] = 231 - 1 可以使用双指针的方法来实现这个功能。一

    2024年02月22日
    浏览(35)
  • 简单编程代码表白c语言,简单编程代码入门图标

    大家好,给大家分享一下简单编程代码表白手机版,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 大家好,本文将围绕python程序编程代码大全展开说明,python编程游戏代码是一个很多人都想弄明白的事情,想搞清楚python代码大全简单需要先了解以下几个事

    2024年02月04日
    浏览(45)
  • Go语言——【高质量编程 | 代码规范】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 高质量编程,就是指编写的代码能够达到正确可靠的同时,具备简洁清晰、结构明了等特点,可以让团队成员很快的上手。具体来说,有

    2024年02月01日
    浏览(98)
  • 极语言中文编程_学习笔记

    更多有关极语言中文编程的信息请看文件夹下的sec.htm或者官网的编程说明书 http://sec.yihuolao.com/sec.htm 。 极语言的官方网址是: http://sec.yihuolao.com/ http://sec.z5x.cn/ http://www.z5x.cn/ 极语言入门教学视频:https://www.ixigua.com/7128748847265743371 极语言游戏教学视频:https://www.ixigua.com/712

    2024年02月05日
    浏览(50)
  • 【C语言】C语言编程实战:Base64编解码算法从理论到实现(附完整代码)

    🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍 :分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服

    2024年03月13日
    浏览(38)
  • 从零开始学习R语言编程:完全指南

    R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方便地实现算法和数据操作。本

    2024年02月10日
    浏览(59)
  • 从零开始学习JavaScript:轻松掌握编程语言的核心技能⑤

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 📑📑 在 JavaScript 中,函数可以通过 function 来定义 。 📌 函数定义的一般语法如下: 其中,

    2024年02月08日
    浏览(69)
  • 从零开始学习JavaScript:轻松掌握编程语言的核心技能④

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 📌 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。 表单数据经常需

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包