编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输出:["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
思路分析:当前这个题目,按照正常遍历每个字符串的依次字母来做就行,正常情况我们用for来循环就可以了,但是考虑到提升性能,我们可以用python3的zip函数来做,这样的好处就是节约内存。
这里可以稍微介绍一下zip(官网链接)的用法:
image.png
image.png
从zip函数直接获取tuple对象,迭代和赋值一气呵成:
>>> x,y,z = zip('abc','123')
>>> x
('a', '1')
>>> y
('b', '2')
>>> z
('c', '3')
Python官方有一个使用zip函数来做矩阵转置的case,比较有意思:
>>> matrix = [
... (1,2,3,4),
... (5,6,7,8),
... (9,10,11,12),
... ]
>>> matrix
[(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)]
>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
再回到我们当前这个题目中来,那就使用zip之后,整个代码就简洁高效多了
class Solution:
def longestCommonPrefix(self, strs) -> str:
res = ""
if len(strs) == 0:
return ""
for each in zip(*strs): # zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
if len(set(each)) == 1: # 利用集合创建一个无序不重复元素集
res += each[0]
else:
return res
return res