题目描述:
实现 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() 定义相符。
我的方法:
该题较为简单,思路如下:
- 考虑needle不在haystack中的情况,直接返回-1。
- 主流程通过遍历haystack,比对haystack[i:i+ll]和needle是否相等,如果相等则直接返回位置。
- 考虑输入输出均为空的情况,此时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