最长公共前缀个人总结

本文介绍了如何利用Python解决LeetCode中的‘最长公共前缀’问题,包括三种不同的实现方法:通过字符串比较、字符串遍历和字符串匹配。讨论了每种方法的思路和时间复杂度,并提供了具体的代码实现。同时,文章提到了zip函数的使用以及min和max函数在寻找公共前缀中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做的是力扣简单题的最长公共前缀,依然一开始没有什么想法,思路也没有,好像这个题目与我无关一样,怎么想也想不出来如何做才能做出这样的题目。

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

主要思路是这样的,有一个字符串数组,先对一个字符串进行提取作为匹配目标,用遍历前后两个字符串的方式匹配,每次成功匹配就加一位,匹配到无法相等的地方就结束,一直匹配,知道所有字符串匹配完成,时间复杂度是O(n)。

class solution:
    def longeststr(strs):
        if strs=='': #当字符串为空的时候,直接返回空字符串数组
            return strs
        ans = strs[0]  #提取第一个作为锚定字符
        for i in range(1,len(strs)):    #选择后面的进行匹配
            idx = 0
            for char1,char2 in zip(ans,strs[i]):
                if char1 != char2:
                    break  #先对这个函数进行判定
                idx+=1
            ans = ans[0:idx]
            if ans =="":
                return ans
        return ans

这是我半看到别人的思路写出来的, 确实不能算是原创,原创作者在解题里面排头的高分引用里面。

这里有什么知识呢,首先,我判断为空就直接返回这点,其实可以放在后面,比如

ans = strs[0]
if ans=='':
    return ans

还有这里zip 的用法也是一个知识点,zip可以将对象当中的相对应的地方打包成一个个元组的数组列表,用的时候可以直接匹配。

想法2.

如何简单地将我想要的公共前缀提取出来。

        if not s:
            return ""
        res = s[0]
        i = 1
        while i < len(s):  #判断字符串数组比1大。
            while s[i].find(res) != 0:  #判断如果在这个字符串无法与之匹配
                res = res[0:len(res)-1]  #切片减少一位,继续进行
            i += 1
        return res

选找大小然后再进行枚举选择似乎也能节省不少时间。

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs: 
            return ""
        s1 = min(strs)
        s2 = max(strs)
        for i,x in enumerate(s1):
            if x != s2[i]:
                return s2[:i]
        return s1 

这里先把最大长度和最小长度都标注出来,然后,枚举可以直接将下标和字符串标注出来,用以匹配。

这里的min和max都要调用筛选算法,理论上复杂度应该为O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值