【LeetCode】28. 实现 strStr()

116 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 题目给出的是两个字符串 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 字符串

image.png

当 i=0,则取haystack[0:2]对比,(字符串分片取头不取尾),不相等,则i+1

image.png

当 i=1,则取haystack[1:3]==“el”对比,不相等,则i+1

image.png

当 i=2, 则取haystack[2:4]=="ll"对比,相等,则返回i=2

image.png

我们使用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吧)

image.png

时间复杂度为O(n(m-n)),空间复杂度O(1)