leetcode28.实现strStr()
发布于 2021-04-17 05:30 ,所属分类:知识学习综合资讯
题目描述
题目描述
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例
输入: haystack = "hello", needle = "ll"输出: 2输入: haystack = "aaaaa", needle = "bba"输出: -1
(左右滑动查看完整内容)
说明
当 needle 是空字符串时,应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时应当返回 0 。
难度:简单
标签:双指针、字符串
分析和题解
方法一
双指针法:从两字符串的第一个元素开始比较,如果相同,两指针都自增1,指向下一个元素;如果不相同,指针n归零,从头开始,指针h指向下一个元素,直到遍历完整个字符串。最后如果n等于needle的长度,则说明存在,返回h-len(needle),否则不存在,返回-1。
class Solution:def strStr(self, haystack: str, needle: str) -> int:if needle == '': return 0h, n = 0, 0 # 双指针while h<len(haystack) and n<len(needle): # 从两字符串的第一个元素开始比较if haystack[h] == needle[n]: # 如果相同,两指针都自增1,指向下一个元素h += 1n += 1else: # 不相同,则指针n归零,从头开始,指针h指向下一个元素h = h-n+1n = 0if n == len(needle):return h-len(needle)else:return -1
(左右滑动查看完整代码)
方法二
利用切片形成一个滑动窗口,沿着字符串逐步移动滑动窗口,将窗口内的子串与 needle 字符串比较。
class Solution:def strStr(self, haystack: str, needle: str) -> int:for i in range(len(haystack)-len(needle)+1):if haystack[i:i+len(needle)] == needle:return ireturn -1
(左右滑动查看完整代码)
方法三
使用python的内置函数find()
class Solution:def strStr(self, haystack: str, needle: str) -> int:return haystack.find(needle)
(左右滑动查看完整代码)






![Java设计系列课程[共28课]](https://static.kouhao8.com/sucaidashi/xkbb/f78de148a5a09c7b6dcd70fb61d4b136.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[Python] 老男孩Python运维自动化开发14期视频教程 金角大王Aex老师主讲28周 15-28周](https://static.kouhao8.com/sucaidashi/xkbb/b364dba1a2c78a4c48253ac45aa2d605.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)













![【王闯】中考物理一、二轮复习联报班(28讲)[百度网盘分享]](https://static.kouhao8.com/cunchu/cunchu7/2023-05-18/UpFile/defaultuploadfile/230430ml/68-1.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)









相关资源