Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 题目给出的是两个字符串 haystack 和 needle
- 要求是在 haystack 中 needle 字符串出现的第一个位置(index=0)
- 当 needle 为空字符串,则返回0
- 当 needle 长度大于 haystack长度,则返回 -1
二、思路分析:
当我们看到这个题,最简单的方法就是使用字符串进行匹配,方法步骤为:
- 首先我们把 needle 当作整体,求出 needle 的长度
- 通过字符串分片特点,在 haystack 取 [len(haystack)-len(needle)+1] 距离
- 通过 for 循环中指针i在 [len(haystack)-len(needle)+1] 取值,比较 needle 与haystack[i:i+len(needle)]
我们来画个图,来分析一下上述步骤:
初始化haystack 和 needle 字符串
当 i=0,则取haystack[0:2]对比,(字符串分片取头不取尾),不相等,则i+1
当 i=1,则取haystack[1:3]==“el”对比,不相等,则i+1
当 i=2, 则取haystack[2:4]=="ll"对比,相等,则返回i=2
我们使用python实现如上步骤,代码如下:
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
if needle not in haystack:
return -1
if needle == "":
return 0
if len(haystack) < len(needle):
return -1
for i in range(0,len(haystack)-len(needle)+1):
if needle == haystack[i:i+len(needle)]:
return i
return -1
三、总结
本期,strStr()实现是使用的字符串分片方法进行的,时间复杂度比大佬们使用KMP算法,慢了很多。
由于本人能力有限,还没有搞懂KMP算法,也未使用其来实现该题目。
提交AC,执行时间为300ms,执行效率太慢了。(不过咱们菜鸟先实现0,再去看1吧)
时间复杂度为O(n(m-n)),空间复杂度O(1)