首页 > 编程语言 > 详细

【leetcode算法-简单】28. 实现strStr

时间:2019-12-03 15:46:47      阅读:71      评论:0      收藏:0      [点我收藏+]

【题目描述】

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

 

解答

  • 解法一:利用split函数分割

  分割完之后的返回值是一个列表 l ,如果haystack中有needle,则 l[0]的长度就是needle第一次出现的位置

  eg1:haystack = ‘xxxzyn‘

        needle = ‘zyn‘

    l = haystack.split(needle,1)  分割一次

    l = [‘xxx‘,‘zyn‘]

    len(l[0]) = 3    

    即needle第一次出现的位置为3

  eg2:haystack = ‘xxxzyn‘     

        needle = ‘not‘   

    l = haystack.split(needle,1)  分割一次

    l = [‘xxxzyn‘]

    len(l) =1

    根据 if-else 判断题条件,返回-1

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if not needle: return 0
        l = haystack.split(needle,1)
        if len(l) == 1:
            return -1
        else:
            return len(l[0])

  执行用时:40ms

 

  • 解法二:在haystack中遍历查找长度为len(needle)的索引范围
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        if not needle: return 0
        n1=len(haystack)
        n2=len(needle)
        for i in range(n1-n2+1):
            if haystack[i:i+n2]==needle:
                return i
        return -1

  执行用时:36ms

 

 

【leetcode算法-简单】28. 实现strStr

原文:https://www.cnblogs.com/xxx1206/p/11976945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!