28.实现strStr()
https://leetcode-cn.com/problems/implement-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,右指由于左闭右开,所以right指针为滑窗长度len(needle)
while 右指针小于等于len(haystack)判断滑窗是否等于目标字符串
等于返回left指针,不等于左、右指针同时加1.
解题:
class Solution: def strStr(self, haystack, needle): if not needle: return 0 left = 0 right = len(needle) while right <= len(haystack): if haystack[left:right] == needle: return left left += 1 right += 1 return -1