[Leetcode]28. 实现strStr()

题目描述:

实现 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() 定义相符。

我的方法:

该题较为简单,思路如下:

  1. 考虑needle不在haystack中的情况,直接返回-1。
  2. 主流程通过遍历haystack,比对haystack[i:i+ll]和needle是否相等,如果相等则直接返回位置。
  3. 考虑输入输出均为空的情况,此时for循环不会运行,直接返回0即可。

效果还行:执行用时 : 32 ms, 在Implement strStr()的Python提交中击败了78.80% 的用户。内存消耗 : 12 MB, 在Implement strStr()的Python提交中击败了23.08% 的用户。

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        # 考虑needle不在haystack中的情况
        if needle not in haystack:
            return -1
        # 主流程:处理一般情况
        ll=len(needle)
        for i in range(len(haystack)):
            if haystack[i:i+ll]==needle:
                return i
        # 考虑输入输出均为空的情况
        return 0

别人的方法:

初步的感受是,我的方法应该不是最简单的方法,毕竟没花几分钟时间来解。别人的方法总有值得借鉴的地方。

果然有更加简洁的解法,主要是用到了str.find()方法。但其实运行速度和我的方法是一样的:执行用时 : 32 ms, 在Implement strStr()的Python提交中击败了78.80% 的用户。内存消耗 : 12 MB, 在Implement strStr()的Python提交中击败了29.64% 的用户。

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if not needle:
            return 0
        if needle in haystack:
            return haystack.find(needle)
        else:
            return -1
上一篇:PHP第一天 ----比较运算符


下一篇:Haystack-全文搜索框架