美文网首页
14 最长公共前缀

14 最长公共前缀

作者: 晨光523152 | 来源:发表于2019-10-15 19:34 被阅读0次

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

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

    示例 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

    相关文章

      网友评论

          本文标题:14 最长公共前缀

          本文链接:https://www.haomeiwen.com/subject/issnpctx.html