28. 实现 strStr() 未写完!!!!!

题目
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。

当然面试不这么写了哈哈哈,击败99%

    def strStr(self, haystack: str, needle: str) -> int:
        return haystack.find(needle) if needle else 0
暴力法

三种情况

  1. 如果是,且不是第一次匹配到,则curr+1
  2. 如果是,且是第一次匹配到,则pre等于现在的索引,并且curr+1
  3. 否则,重新初始化参数,并且让i退回到第一次索引的下一个
    时间复杂度O(MN)击败50%
    def strStr(self, haystack: str, needle: str) -> int:
        len_needle = len(needle)
        if not len_needle: return 0
        
        pre = -1 # 子串第一次在主串匹配的位置
        curr = 0 # 子串现在子串中检索的位置
        i = 0
        while i<len(haystack):
            if haystack[i] == needle[curr] and pre!=-1:
                curr+=1
                if curr == len_needle:
                    return pre
            elif haystack[i] == needle[curr]:
                pre = i
                curr+=1
                if curr == len_needle:
                    return pre
            # elif haystack[i] != needle[curr] and haystack[i] == needle[0]:
            #     pre = i
            #     curr = 0
            else:
                i = i - curr
                pre = -1
                curr = 0
            i+=1
        return -1

另一种暴力法

def strStr(self, haystack: str, needle: str) -> int:
        c=-1
        for i in range(len(haystack)-len(needle)+1):
            if haystack[i:i+len(needle)]==needle:
                c=i
                break
        return c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值