题目

实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
示例 1:
输入:haystack = “hello”, needle = “ll”
输出:2
示例 2:
输入:haystack = “aaaaa”, needle = “bba”
输出:-1
示例 3:
输入:haystack = “”, needle = “”
输出:0
提示:
0 <= haystack.length, needle.length <= 5 * 10^4
haystack 和 needle 仅由小写英文字符组成
来源:力扣(LeetCode)

解题思路

  匹配模式串比较出名的算法就是KMP了,你也可以使用朴素的暴力匹配。

class Solution:def strStr(self, haystack: str, needle: str) -> int:if needle=='':return 0for i in range(len(haystack)):if haystack[i:i+len(needle)]==needle:return ireturn -1


  而KMP算法比较复杂,建议观看相关视频以加深理解。

class Solution:def strStr(self, haystack: str, needle: str) -> int:n=len(needle)m=len(haystack)needle=' '+needle  #添加哨兵haystack=' '+haystackNext=[0]*(n+1)i,j=1,0while i<n:  #求next数组if j==0 or needle[i]==needle[j]:i+=1j+=1if needle[i]!=needle[j]:Next[i]=jelse:Next[i]=Next[j]else:j=Next[j]i,j=1,1while i<=m and j<=n: #KMPif j==0 or haystack[i]==needle[j]:i+=1j+=1else:j=Next[j]return i-n-1 if j>n else -1

LeetCode简单题之实现 strStr()相关推荐

  1. leetcode python3 简单题28. Implement strStr()

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二十八题 (1)题目 英文: Implement strStr(). Return ...

  2. LeetCode简单题之基于排列构建数组

    题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...

  3. LeetCode简单题之Excel 表中某个范围内的单元格

    题目 Excel 表中的一个单元格 (r, c) 会以字符串 "" 的形式进行表示,其中: 即单元格的列号 c .用英文字母表中的 字母 标识. 例如,第 1 列用 'A' 表示, ...

  4. LeetCode简单题之增量元素之间的最大差值

    题目 给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 ...

  5. LeetCode简单题之二进制矩阵中的特殊位置

    题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 . 特殊位置 定义:如果 mat[i][j] == 1 ...

  6. LeetCode简单题之设计 Goal 解析器

    题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...

  7. LeetCode简单题之检查两个字符串数组是否相等

    题目 给你两个字符串数组 word1 和 word2 .如果两个数组表示的字符串相同,返回 true :否则,返回 false . 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串. ...

  8. LeetCode简单题之找出数组的最大公约数

    题目 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 . 两个数的 最大公约数 是能够被两个数整除的最大正整数. 示例 1: 输入:nums = [2,5,6,9,10] 输出: ...

  9. LeetCode简单题之排列硬币

    题目 你总共有 n 枚硬币,并计划将它们按阶梯状排列.对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币.阶梯的最后一行 可能 是不完整的. 给你一个数字 n ,计算并返回可形成 完整阶 ...

最新文章

  1. [置顶] 归并排序,逆序数
  2. Opencv获取导入DNN模型的各层信息
  3. eclipse热部署_Spring Boot Devtools热部署
  4. IDEA-2020版本 Gradle项目控制台输出乱码
  5. Java黑皮书课后题第5章:*5.48(处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符
  6. C语言一元二次方程表示如下,C语言一元二次方程day6
  7. Docker 官方公共仓库 Docker Hub 遭攻击,恐19 万用户信息泄露;Intel 10核心新品要现身了?...
  8. Linux常用命令汇总及使用方法(二)之文本编辑器VI
  9. 要了解CommunityServer的架构不得不看的文章
  10. 为安装有系统及应用程序的服务器更换硬盘方法一例
  11. 小白安装linux系统一键,小白如何快速安装vos3000,一键快速安装VOS
  12. BCH码(能纠正多个随机错误的循环码)
  13. 3dmax塌陷在哪里?怎么用?
  14. python+django+mysql图片分享平台毕业设计毕设开题报告
  15. 无线路由器与交换机配合使用,图解
  16. s3c6410裸机调试方式总结
  17. 学院开展计算机基础知识比赛,信阳师范学院顺利举办第七届计算机基础知识决赛...
  18. 学习指针后对int main(int argc, char *argv[]),“()“内部参数的详解(初学者不要怕,浅浅学过指针的就可以看懂)
  19. springBoot发送邮件附件名称乱码的解决
  20. a^x求导是怎么来的呢?

热门文章

  1. app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
  2. Redis 笔记(14)— 持久化及数据恢复(数据持久方式 RDB 和 AOF、数据恢复、混合持久化)
  3. 2022-2028年中国演出市场深度调研与发展前景报告
  4. 在pycharm中无法引入同一目录下的python文件
  5. debian10 nfs简单搭建
  6. 提高班第五周周记(国庆第二天)
  7. 【J2SE】java概述
  8. 【运维学习笔记】在 vSphere Client上创建新的虚拟机
  9. fileinput_open_读写文件_python
  10. 3D惯导Lidar仿真