【LeetCode 28】Implement strStr() (Python)

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题目分析:判断needle给出的字符串是否是haystack给出的字符串的子串。如果是返回needle第一个字符在haystack出现的位置。
示例:
Input: haystack = “hello”, needle = “ll”
Output: 2

Input: haystack = “aaaaa”, needle = “bba”
Output: -1

方法一:

  1. 思路:检测字符串是否包含某字符串时,在python中有两个现成的方法—–index()和find()。
  2. 优点:代码短,简单。直接就可以返回对应位置。 时间复杂度O(1)。
    缺点:有局限性,只适用于这道题。
  3. 代码:
class Solution:
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type n eedle: str
        :rtype: int
        """
        if needle in haystack:
            return haystack.find(needle)
        else:
            return -1
class Solution:
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type n eedle: str
        :rtype: int
        """
        if needle in haystack:
            return haystack.index(needle)
        else:
            return -1

方法二:

  1. 思路:循环haystack(不全循环,只到needle首字母出现的位置即可),当遇到与needle首字母相同时,检查haystack从该位置开始的与needle长度相同的部分的内容是否相同。如果是返回首字母出现的位置,否则返回-1。
  2. 优点:换一部分代码就可用于其他情况,适用范围广。也好懂。
    缺点:代码较长。时间复杂度应该是O(n)吧(这个因为包含了好几个if还有while所以不太会算,好像还要结合概率论。会算的可以在评论里教教我,不胜感激
  3. 代码:
class Solution:
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type n eedle: str
        :rtype: int
        """
        if not needle:
            return 0
        for i in range(len(haystack)-len(needle)+1):
            if haystack[i]==needle[0]:
                j=1 #用来记数needle已经检查了几个字母
                while j<len(needle) and haystack[i+j]==needle[j]:
                    j+=1
                if j==len(needle):
                    return i
        return -1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值