leetcode14:Longest Common Prefix_python简易写法总结

本文深入解析了一种使用Python实现的前缀匹配算法,通过具体示例解释了如何利用zip和set函数来查找字符串数组中的最长公共前缀。文章详细介绍了enumerate、zip和set函数的用法,适合Python初学者及对前缀匹配算法感兴趣的读者。

来自网友syrupmachine:

class Solution:
    # @return a string
    def longestCommonPrefix(self, strs):
        if not strs:
            return ""
            
        for i, letter_group in enumerate(zip(*strs)):
            if len(set(letter_group)) > 1:
                return strs[0][:i]
        else:
            return min(strs)

这样一看有一些看不懂的东西,看来学python还有很长的路要走的。。

 for i, letter_group in enumerate(zip(*strs)):
     if len(set(letter_group)) > 1:
         return strs[0][:i]

从这一句看起 首先enumerate这个在之前学c的时候见过,是枚举类型


seq = ['one', 'two', 'three']

for i, element in enumerate(seq):

    print i, element

从这一段代码里面 就应该能够看得懂是怎么用的了,这段的输出是    

0 one

1 two

2 three

zip这个函数没有见过,在网上找一段代码来理解

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b)    

如上,如果输出zipped得到的结果是

[(1, 4), (2, 5), (3, 6)]

看来zip的作用是将对象打包成元组。
那么在这道题的代码里面用到的是

zip(*zipped)          

这个是什么作用呢

看输出

[(1, 2, 3), (4, 5, 6)]

看来是一个解打包的作用

我的python版本是3.7.1测试了一下如下代码会返回错误值

list = ["dog","rabbit","fish"]
a = zip(*list)
print(a)

输出为<zip object at 0x0000019DC4EC2A08>

参考了这篇blog,原来是python2和python3的区别

改成如下就正确啦

list = ["dog","rabbit","fish"]
a = zip(*list)
for i in a:
    print (i)

这个时候输出变为

('d', 'r', 'f')
('o', 'a', 'i')
('g', 'b', 's')

zip到此为止,下面看一下set(我咋啥都不会)

set是一个无序的不重复的序列。详细的内容不想写了。

插一句。。。。我看代码没看懂的原因之一是没有在意prefix这个单词的意思,刚刚去逛了一下中文leetcode,发现他是前缀的意思,也就是说,['wwfff','ffaaa','ccffc']这种情况,不需要考虑ff是不是最长的(因为不是最长公共子序列的问题!)

那么现在就很好理解了比如题里面所给的例子

["flower","flow","flight"]

在zip之后变成

('f', 'f', 'f')
('l', 'l', 'l')
('o', 'o', 'i')
('w', 'w', 'g')

那么代码的意思就是,看什么时候不存在了最长前缀,比如这个题,第一组都是f,刚刚说了set是可以用来去除重复的,那么前两组set之后的长度一直是1,到第三组开始大于了1,输出前两个元素,也就是fl

先写到这啦,睡觉了~~~

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值