LeetCode简单题之实现 strStr()
题目
实现 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()相关推荐
- leetcode python3 简单题28. Implement strStr()
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第二十八题 (1)题目 英文: Implement strStr(). Return ...
- LeetCode简单题之基于排列构建数组
题目 给你一个 从 0 开始的排列 nums(下标也从 0 开始).请你构建一个 同样长度 的数组 ans ,其中,对于每个 i(0 <= i < nums.length),都满足 ans ...
- LeetCode简单题之Excel 表中某个范围内的单元格
题目 Excel 表中的一个单元格 (r, c) 会以字符串 "" 的形式进行表示,其中: 即单元格的列号 c .用英文字母表中的 字母 标识. 例如,第 1 列用 'A' 表示, ...
- LeetCode简单题之增量元素之间的最大差值
题目 给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 ...
- LeetCode简单题之二进制矩阵中的特殊位置
题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 . 特殊位置 定义:如果 mat[i][j] == 1 ...
- LeetCode简单题之设计 Goal 解析器
题目 请你设计一个可以解释字符串 command 的 Goal 解析器 .command 由 "G"."()" 和/或 "(al)" 按某种 ...
- LeetCode简单题之检查两个字符串数组是否相等
题目 给你两个字符串数组 word1 和 word2 .如果两个数组表示的字符串相同,返回 true :否则,返回 false . 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串. ...
- LeetCode简单题之找出数组的最大公约数
题目 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 . 两个数的 最大公约数 是能够被两个数整除的最大正整数. 示例 1: 输入:nums = [2,5,6,9,10] 输出: ...
- LeetCode简单题之排列硬币
题目 你总共有 n 枚硬币,并计划将它们按阶梯状排列.对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币.阶梯的最后一行 可能 是不完整的. 给你一个数字 n ,计算并返回可形成 完整阶 ...
最新文章
- [置顶] 归并排序,逆序数
- Opencv获取导入DNN模型的各层信息
- eclipse热部署_Spring Boot Devtools热部署
- IDEA-2020版本 Gradle项目控制台输出乱码
- Java黑皮书课后题第5章:*5.48(处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符
- C语言一元二次方程表示如下,C语言一元二次方程day6
- Docker 官方公共仓库 Docker Hub 遭攻击,恐19 万用户信息泄露;Intel 10核心新品要现身了?...
- Linux常用命令汇总及使用方法(二)之文本编辑器VI
- 要了解CommunityServer的架构不得不看的文章
- 为安装有系统及应用程序的服务器更换硬盘方法一例
- 小白安装linux系统一键,小白如何快速安装vos3000,一键快速安装VOS
- BCH码(能纠正多个随机错误的循环码)
- 3dmax塌陷在哪里?怎么用?
- python+django+mysql图片分享平台毕业设计毕设开题报告
- 无线路由器与交换机配合使用,图解
- s3c6410裸机调试方式总结
- 学院开展计算机基础知识比赛,信阳师范学院顺利举办第七届计算机基础知识决赛...
- 学习指针后对int main(int argc, char *argv[]),“()“内部参数的详解(初学者不要怕,浅浅学过指针的就可以看懂)
- springBoot发送邮件附件名称乱码的解决
- a^x求导是怎么来的呢?
热门文章
- app如何打开了request url_手机日历app内如何打开节日提醒功能?支持提前提醒节日的云便签...
- Redis 笔记(14)— 持久化及数据恢复(数据持久方式 RDB 和 AOF、数据恢复、混合持久化)
- 2022-2028年中国演出市场深度调研与发展前景报告
- 在pycharm中无法引入同一目录下的python文件
- debian10 nfs简单搭建
- 提高班第五周周记(国庆第二天)
- 【J2SE】java概述
- 【运维学习笔记】在 vSphere Client上创建新的虚拟机
- fileinput_open_读写文件_python
- 3D惯导Lidar仿真