题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例
题解一
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 按照字典顺序找到strs中最大的字符串和最小的字符串
str0 = min(strs)
str1 = max(strs)
for i in range(len(str0)):
# str0和str1如果本身就没有相同前缀,那么直接返回空字符串
# str0和str1如果本身有相同前缀,那么能保证strs中所有字符串都存在相同前缀,这是min和max决定。此时只需要找到从哪里不一样就行了。决定最大相同前缀的最大长度取决于min,比如[‘apple’,‘apples’],str0=‘apple’,str1=‘apples’
if str0[i]!=str1[i]:
return str0[:i]
return str0
题解二
# zip(*strs) 是 Python 中的一个常见技巧,它被用来将多个可迭代对象(比如列表)中对应位置的元素打包成一个元组的迭代器。
# 在这个特定的例子中,strs 是一个字符串列表,*strs 表示将列表中的元素分别传递给 zip() 函数,而不是将整个列表作为一个单独的参数传递。
# 假设 strs 是 ["abc", "def", "ghi"]。zip(*strs) 实际上等价于 zip("abc", "def", "ghi"),它将返回一个迭代器,包含了三个元组 ('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
s = ""
for i in zip(*strs):
if len(set(i)) == 1:
s += i[0]
else:
# 遇到不等于1的直接跳出循环
break
return s