码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode]28. 实现strStr()

时间:2019-04-29 20:52:16      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:输入输出   思路   stack   return   最简   turn   obj   int   描述   

题目描述:

实现 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

[Leetcode]28. 实现strStr()

标签:输入输出   思路   stack   return   最简   turn   obj   int   描述   

原文地址:https://www.cnblogs.com/jackley/p/10792684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!