Write a function to find the longest common prefix string amongst an array of strings.
最长公共前缀
思路:
解法一:先找出里面最短的字符,然后只需依次比较最短的字符前缀最长的即可,略
解法二:运用zip(*list)实现行列变换
关于zip的用法如下:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print xyz
结果:[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 说明按列zip
x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)
print xy
结果:[(1, 4), (2, 5), (3, 6)] 说明按最短的list进行zip
x = [1, 2, 3]
x = zip(x)
print x
结果: [(1,), (2,), (3,)]
strs = ["asf","fesfg","feswegg"]
zip(*strs)
结果: [('a', 'f', 'f'), ('s', 'e', 'e'), ('f', 's', 's')]
因此,这里有个利用zip函数的简单方法,这里还用到了set,按列取set,如果最后还没跳出循环,则返回最小字符串:
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
for i,chars in enumerate(zip(*strs)):
if len(set(chars)) > 1:
return strs[0][:i]
return min(strs)