[Leetcode]28. 实现strStr()

匿名 (未验证) 提交于 2019-12-02 23:26:52

题目描述:

实现 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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!