力扣代码学习日记二

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 0def build_lps(pattern):lps = [0] * len(pattern)j = 0for i in range(1, len(pattern)):while j > 0 and pattern[i] != pattern[j]:j = lps[j - 1]if pattern[i] == pattern[j]:j += 1lps[i] = jreturn lpslps = build_lps(needle)j = 0for i in range(len(haystack)):while j > 0 and haystack[i] != needle[j]:j = lps[j - 1]if haystack[i] == needle[j]:j += 1if j == len(needle):return i - j + 1return -1

KMP算法的时间复杂度为O(N+M),其中N是haystack的长度,M是needle的长度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队笔记Day4 -->多层代理(模拟企业拓扑)

声明&#xff1a;本机文章只用于教育用途&#xff0c;无不良引导&#xff0c;禁止用于从事任何违法活动 前几天的红队笔记的网络拓扑都比较简单&#xff0c;今天就来模拟一下企业的真实网络拓扑&#xff0c;以及攻击方法 一般的大企业的网络拓扑如下&#xff1a;&#xff1a;…

NodeJs事件循环

NodeJs事件循环 能力有限&#xff0c;暂时理解不了。 网上众说纷纭&#xff0c;而且不同的电脑、操作环境、不同的 NodeJS 版本&#xff0c;结果有可能不一样。 建议自己学习的时候别用 Windows 系统&#xff0c;实在没条件使用虚拟机或者 WSL。

基于Springboot+Vue实现的宿舍管理系统

基于SpringbootVue的宿舍管理系统 1.系统相关性介绍1.1 系统架构1.2 设计思路 2.功能模块介绍2.1 用户信息模块2.2 宿舍管理模块2.3 信息管理模块 3. 源码获取以及远程部署 前言&#xff1a; 在现代教育环境中&#xff0c;学生宿舍的管理显得尤为重要&#xff0c;需要一套能…

如何在Windows中配置多个显示器?这里提供详细步骤

Windows可以通过多种方式使用多个显示器&#xff0c;扩展或复制主显示器。你甚至可以关闭主显示器。以下是如何使用简单的键盘快捷键更改辅助显示设置。 使用WindowsP投影菜单 要快速更改Windows 10处理多个显示器的方式&#xff0c;请按WindowsP。屏幕右侧会弹出一个名为“投…

单点登录(SSO,Single Sign-On)

单点登录&#xff08;SSO&#xff0c;Single Sign-On&#xff09;是一种用户身份验证服务&#xff0c;允许用户使用一组登录凭据&#xff08;如用户名和密码&#xff09;访问多个应用程序或系统。SSO旨在提高用户体验和安全性&#xff0c;通过减少用户需要记住的密码数量&#…

CSP-201903-1-小中大

CSP-201903-1-小中大 【坑!】 注意中位数的输出&#xff0c;当中位数为整数时不保留小数点。当两个整数相加后再除以 2 时&#xff0c;结果会自动向下取整&#xff0c;而不是得到一个准确的浮点数结果。需要确保至少有一个操作数是浮点数类型&#xff0c;以便执行浮点数除法&…

图表示学习 Graph Representation Learning chapter1 引言

图表示学习 Graph Representation Learning chapter1 引言 前言1.1图的定义1.1.1多关系图1.1.2特征信息 1.2机器学习在图中的应用1.2.1 节点分类1.2.2 关系预测1.2.3 聚类和组织检测1.2.4 图分类、回归、聚类 前言 虽然我并不研究图神经网络&#xff0c;但是我认为图高效的表示…

阅读笔记12:(全文翻译)Oocyte quality and aging

Oocyte quality and aging 作者:Ali Reza Eftekhari Moghadam, Mahin Taheri Moghadam, Masoud Hemadi, and Ghasem Saki 发表期刊:JBRA Assist Reprod. 发表时间:April 15, 2021 摘要 众所周知,由于卵子的质量和数量随年龄相关的变化,女性的生育能力在生命的第四个十年期…

电脑重装系统之Windows 10 企业版 LTSC 2021

简介 Windows 10 22H2对于我来说太不简洁&#xff0c;最受不了的一点是微软强行硬塞给我一些并没有什么luan用的应用和功能&#xff0c;比如&#xff1a;天气&#xff0c;Onedrive......以及臃肿的ui设计。而且强行进行自动更新&#xff0c;我是真的受不了这个&#xff0c;看着…

leetcode:343.整数拆分

解题思路&#xff1a; 拆分的越多越好&#xff08;暂且认为&#xff09;&#xff0c;尽可能拆成m个近似相等的数&#xff0c;会使得乘积最大 dp含义&#xff1a;将i进行拆分得到最大的积为dp[i] 递推公式&#xff1a;j x dp[i-j](固定j&#xff0c;只通过凑dp[i-j]进而实现所…

optee UTA加载

流程 动态TA按照存储位置的不同分为REE filesystem TA&#xff1a;存放在REE侧文件系统里的TA&#xff1b; Early TA&#xff1a;被嵌入到optee os里的在supplicant启动之前就可用了。 这里我们讲的是常规的存放在REE侧文件系统里的TA。 通过GP标准调用的与TA通信的命令(opens…

【AIGC】Stable Diffusion的ControlNet参数入门

Stable Diffusion 中的 ControlNet 是一种用于控制图像生成过程的技术&#xff0c;它可以指导模型生成特定风格、内容或属性的图像。下面是关于 ControlNet 的界面参数的详细解释&#xff1a; 低显存模式 是一种在深度学习任务中用于处理显存受限设备的技术。在这种模式下&am…

Vue的一些基础设置

1.浏览器控制台显示Vue 设置找到扩展&#xff0c;搜索Vue 下载这个 然后 点击扩展按钮 点击详细信息 选择这个&#xff0c;然后重启一下就好了 ——————————————————————————————————————————— 2.优化工程结构 src的components里要…

MySQL数据库基础第四篇(多表查询与事务)

文章目录 一、多表关系二、多表查询三、内连接查询四、外连接查询五、自连接查询六、联合查询 union, union all七、子查询1.标量子查询2.列子查询3.行子查询4.表子查询 八、事务八、事务的四大特性九、并发事务问题十、事务隔离级级别 在这篇文章中&#xff0c;我们将深入探讨…

数据结构之队的实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

C++面经

学习视频参考 1 面向对象的三大特征 1.1 封装 1.1.1 目的 隐藏实现细节&#xff0c;实现模块化。 1.1.2 特性 访问权限&#xff1a; public&#xff1a;可以给所有对象访问。protected&#xff1a;仅对子类开放。private&#xff1a;仅对自己开放&#xff0c;可以通过友元…

用HTML5 Canvas创造视觉盛宴——动态彩色线条效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- 声明文档类型为XHTML 1.0 Transitional -…

Python四级考试笔记

Python四级考试笔记【源源老师】 四级标准 一、 理解函数及过程、函数的参数、函数的返回值、变量作用域等概念。 二、 能够创建简单的自定义函数。 三、 理解算法以及算法性能、效率的概念&#xff0c;初步认识算法优化 效率的方法。 四、 理解基本算法中递归的概念。 五、 掌…

C语言---自幂数(“水仙花数”)

1.打印0~100000的自幂数 #include<stdio.h> #include<math.h> int main() {int i 0; for (i 0; i<100000; i){int n 0;int temp i;//判断位数while (temp){n;temp temp / 10;}//每个数字求和temp i;int sum 0;while (temp){sum sum pow(temp % 10, n)…

[office] 如何固定excel单元格的方法 #笔记#微信#微信

如何固定excel单元格的方法 在Excel中录入好数据以后就需要进行统计数据&#xff0c;在有些单元格中的数据不能够改变位置&#xff0c;因此我们需要对特定的单元格进行锁定固定。下面是由小编分享的如何固定excel单元格的方法&#xff0c;供大家阅读、学习。 如何固定excel单元…