赞
踩
这是小白博主在刷leetcode时遇到的一道题,这是博主近日刷的leetcode题库时结果表现最好的一道题,故在此分享这份喜悦。
希望在以后的日子里可以继续进步,持之以恒。
目录
这道题是leetcode题库中的一道简单题(28)题,题目描述如下:
实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-strstr
这里有四种解题思路供读者参考:
(1)find函数:
str.find(str, beg=0, end=len(string))
如果包含子字符串返回索引值,否则返回-1。
(2)index函数:
str.index(str, beg=0, end=len(string))
如果包含子字符串返回开始的索引值,否则抛出异常,即返回:ValueError: substring not found
因此,此种解题思路的代码如下:
- class Solution:
- def strStr(self, haystack: str, needle: str) -> int:
- S = haystack
- return S.find(needle)
- class Solution:
- def strStr(self, haystack: str, needle: str) -> int:
- S = haystack
- return S.index(needle)
注:示例2中,若未查找到子字符串,应返回-1。 find函数符合此要求,index函数不符合此要求。因此,显然find函数更适合此题目。
在这里还要简单地介绍一下与 find和index函数很相似的rfind和rindex函数,区别在于rfind/rindex函数返回的是最后一次出现这个字符串的索引位置,而find/index函数返回的是第一次出现这个字符串的索引位置。
- class Solution:
- def strStr(self, haystack: str, needle: str) -> int:
- S = haystack
- return S.index(needle)
- solution = Solution()
- print(solution.strStr("albjnbl", "l"))
-
- >>>1
-
- class Solution:
- def strStr(self, haystack: str, needle: str) -> int:
- S = haystack
- return S.rindex(needle)
- solution = Solution()
- print(solution.strStr("albjnbl", "l"))
-
- >>>6
-
如上图所示,我们可以将母字符串 中与子字符串 长度相等的子字符串一一与needle的每一位比较。
空间复杂度:。我们只需要常数的空间保存若干变量。
Python可以直接对比两个字符串是否相同,因此我们可以直接对比两个子字符串是否相等,不用逐一对比字符串中的元素。
- class Solution:
- def strStr(self, haystack: str, needle: str) -> int:
- len1 = len(haystack)
- len2 = len(needle)
- if len2 == 0:
- return 0
- if len2 > len1:
- return -1
- else:
- for i in range(len1 - len2 + 1):
- fal_needle = haystack[i:i+len2]
- if fal_needle == needle:
- return i
- return -1
等博主看懂后再更新hhh~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。