14. 最长公共前缀

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

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

示例 1:

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

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

提示:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

起初思路:
起初,我是想通过遍历循环来进行每个元素之间的比较,但是发现写起来会很麻烦,也出现了很多问题,出现的问题我也没能完全解决,所以就改变了思路,发现strs是字符串类型,就想到了字符串类型的大小比较是通过逐个字母的比较,所以只要找到最大的,和最小的,两个的公共部分就是最大前缀。另外也可以用内置函数zip()来将同位置的元素提取出来,再将同位置的元素进行比较是否相同。
方法一:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
    #从字符串比较是通过ASIIC码比较来切入
            min1,max1=min(strs),max(strs)
            if min1!="":#strs是不是空的字符串,如果是空的就直接返回""
                for i in range(len(min1)):#
                    if min1[i]!=max1[i]:
                        return min1[:i]
                return min1#此条语句适用于字符串只有一个字符的特殊情况        
            else:
                return ""

方法二:利用zip()函数
这里首先介绍一下zip()函数:
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

另外,使用zip函数也可以实现同时遍历两个或更多的序列:

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers): 
       print('What is your {0}?  It is {1}.'.format(q, a))
>>>What is your name?  It is lancelot.What is your quest?  It is the holy grail.What is your favorite color?  It is blue.

思路:
通过zip函数将字符串中的每个单词的相同位置的元素取出来,存放在列表中,然后进一步判断,相同位置的元素是否相等,如果相等就说明是公共前缀,如何判断相等呢,可以利用集合数据类型的自动去除重复元素来去重,如果相等,那么集合长度就是1,反之,则不相等。

ans=""
        for  i in list(zip(*strs)):#先解压在转换为列表
            if len(set(i))==1:#这里是利用了集合去重来做的
                ans+=i[0]
            else:
                break
        return ans 

执行用时:
40 ms
内存消耗:
15 MB

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值