LeetCode之最长公共前缀(14)、实现strStr()(28)

1、最长公共前缀(14)

题目描述:

在这里插入图片描述

题目链接

题解一

  • 利用zip(*)函数功能,将字符串的一一对应元素组合到列表中
  • 然后通过集合去重性判断每一个列表集合长度是不是1来决定前缀是否一致

【python3 代码】

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        res=""
        for tmp in list(zip(*strs)):
            tmp_set=set(tmp)
            if len(tmp_set)==1:
                res+=tmp[0]
            else:
                break
        return res

题解二:二分查找

后续补充

2、实现strStr()(28)

题目描述:
在这里插入图片描述
题目链接

题解一:子串逐一比较

  • 将长度为needle长度的滑动窗口沿着 haystack 字符串逐步移动,并将窗口内的子串与 needle 字符串相比较,若相等,则返回第一字符所对应索引
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        L=len(haystack)
        R=len(needle)
        for i in range(L-R+1):
            if haystack[i:i+R]==needle:
                return i
        return -1
  • 时间复杂度: O ( ( N − R ) R ) O((N - R)R) O((NR)R),其中 N 为 haystack 字符串的长度,R 为 needle 字符串的长度。内循环中比较字符串的复杂度为 R,总共需要比较 (N - R) 次。

  • 空间复杂度:O(1)O(1)。

题解二:双指针

题解三:KMP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值