每日一题

LEECODE14 最长公共前缀

示例 1:

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

输出:[''fl'']

解法一:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if len(strs) == 0 or "" in strs:#如果在尚未遍历完所有的字符串时,最长公共前缀已经是空串,则最长公共前缀一定是空串,因此不需要继续遍历剩下的字符串,直接返回空串即可。
            return ""
        if len(strs) == 1:
            return strs[0]#字符串只有一个元素
        minLength = min(len(s) for s in strs)#缩小查询次数
        publicWord =[]
        for i in range(minLength):#列表生成式
            for word in strs:
                publicWord.append(word[:i+1])#添加一个字母
            if len(set(publicWord)) == 1:#去重之后只有一个字母
                publicWord = []
            else:
                return strs[0][:i]#返回第一个字母
        return strs[0][:i+1]

时间复杂度:O(mn),其中 m是字符串数组中的字符串的平均长度,n是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

 

解法二:

def longCommonPrefix(strs: List[str]):
    res = ''
    for each in zip(*strs):#使用 zip 根据字符串下标合并成数组,判断合并后数组里元素是否都相同
        if len(set(each)) == 1:#去重,只有一个就是公共的
            res += each[0]
        else:
            return res
    return res

解题思路:
使用 zip 根据字符串下标合并成数组,
判断合并后数组里元素是否都相同
复杂度分析:
时间复杂度 O(N) ,N 表示数组中最短字符串长度
zip函数见  https://www.runoob.com/python/python-func-zip.html

上面zip解法中有*加参数的用法,

*args:单*参数代表此处接受任意多个非关键字参数,这些参数会以数组形式保存。

*kwargs:多*参数代表此处接受任意多个关键字参数,这些参数会以字典形式保存。

posted @ 2020-06-30 21:02  Nancy-Yang  阅读(100)  评论(0)    收藏  举报