14 最长公共前缀

2019-10-15  本文已影响0人  晨光523152

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

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

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

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

说明:

所有输入只包含小写字母 a-z 。
来源:https://leetcode-cn.com/problems/longest-common-prefix/

因为自己比较菜,都是通过学习别人代码来进步的,总结别人的代码如下,其中我遇到没看懂的代码,会努力看懂,并且作为知识记录下来

解法一:
思路:先找到长度最短的单词,然后遍历这个单词,判断单词的元素是否和别的单词在相同的位置上是否相等。

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        else:
            temp = min(strs, key=len)
            for i in range(len(temp)):
                for others in strs:
                    if others[i] != temp[i]:
                        return temp[:i]
        return temp

从中学到的知识1

temp = min(strs, key = len)

没想到min函数还能这样用,min/max函数一些高阶用法可以参考如下
链接:https://www.cnblogs.com/whatisfantasy/p/6273913.html
其中的找出字典中值最大的那组数据很有意思。
如果有一组商品,其名称和价格都存在一个字典中,可以用下面的方法快速找到价格最贵的那组商品:

prices = { 'A':123,  'B':450.1, 'C':12,  'E':444}
max_prices = max(zip(prices.values(), prices.keys()))

对于zip函数的用于总结如下:

zip(*iterables):
函数定义:从参数中的多个迭代器取元素组合成一个新的迭代器;
输入:元组,列表,字典等迭代器
输出:返回一个zip对象,其内部元素为元组;可以转化为列表或元组;

当zip函数中只有一个参数时:依次从参数中取出一个元素,组成新的一个元组

list1 = [1, 2, 3, 4]
for i in zip(list1):
    print(i)

输出:

(1,)
(2,)
(3,)
(4,)

当zip函数中有两个参数时:依次从两个参数中分别取出一个元素,并且组成新的一个元组,每个元组中含有两个元素

list1 = [1, 2, 3, 4]
list2 = [5,6,7,8]
for i in zip(list1, list2):
    print(i)

输出:

(1, 5)
(2, 6)
(3, 7)
(4, 8)
list1 = [1, 2, 3, 4]
list2 = [5,6,7,8]
for i,j in zip(list1, list2):
    print('i=:',i)
    print('j=:',j)

输出:

i=: 1
j=: 5
i=: 2
j=: 6
i=: 3
j=: 7
i=: 4
j=: 8

解法二:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        res = ""
        if len(strs) == 0:
            return ""
        for each in zip(*strs):
            if len(set(each)) == 1:#利用集合创建一个无序不重复元素集
                res += each[0]
            else:
                return res
        return res

从中学到的知识2

在变量前面加一个*号:
元组变量前加 * 视为对元组解包。解包后的子内容会依次赋值给对应位置的其他变量。
e.g 1.

a = {'a':1,'b':2}
print(*a)

输出:

a b

e.g. 2

a = ["flower","flow","flight"]
print(*a)

输出:

flower flow flight

有一个没看懂的例子

c = (1, 2, 3, 4, 5)
a, *b = c
print('a=:',a)
print('b=:',b)

输出:

a=: 1
b=: [2, 3, 4, 5]
c = (1, 2, 3, 4, 5)
*a, b = c
print('a=:',a)
print('b=:',b)

输出:

a=: [1, 2, 3, 4]
b=: 5

参考资料:
https://www.cnblogs.com/waltsmith/p/8029539.html
https://www.jianshu.com/p/efe9dd65a842
https://www.zhihu.com/question/339491887
https://blog.csdn.net/qq_34364995/article/details/80274107

上一篇下一篇

猜你喜欢

热点阅读