每日一题
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:多*参数代表此处接受任意多个关键字参数,这些参数会以字典形式保存。

浙公网安备 33010602011771号