实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = "hello", needle = "ll" 输出: 2
示例 2:
输入: haystack = "aaaaa", needle = "bba" 输出: -1
说明:
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
**难度**: Easy
**标签**: 双指针、 字符串、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:40 ms, 在所有 Python3 提交中击败了80.24% 的用户
内存消耗:13.5 MB, 在所有 Python3 提交中击败了97.09% 的用户
解题思路:
使用双指针分别指向两字符串
具体实现见代码注释
"""
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
if needle == '':
return 0
len_i, len_j = len(haystack), len(needle)
record = -1 # 初始化为-1, 用于记录字符相等时的下标
i, j = 0, 0 # 双指针
while i < len_i: # 循环遍历字符串haystack
if haystack[i] == needle[j]: # 若haystack当前下标i指向的字符与needle字符串当前下标j所指向的字符相等
record = i # record记录当前i下标
j += 1 # 后移needle字符串下标
else:
i = i-j # 否则,将i下标移动到之前开始匹配的后一项
j = 0 # j指针指向needle第一个字符
record = -1 # record归-1
if j > len_j-1: # 如needle字符串遍历完毕,则跳出循环
break
else:
record = -1
i += 1
if record > 0: # 匹配成功时,record指向匹配字符串的末尾,需要移动到匹配字符串的开始
record -= len_j-1
return record