题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”] 输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母 a-z 。
方法一:一行代码解决!!!(48ms)
class Solution:
def longestCommonPrefix(self, strs) :
return os.path.commonprefix(strs)
总结:os.path.commonprefix(list) 返回list中,所有path共有的最长的路径。 看完大神的解法,我只能说,Python的库神秘巧妙,博大精深啊!
方法二:先找到最短的单词的长度n,初始化公共前缀common为首元素的[: n] 然后从头开始对每个单词进行比较,比较过程中不断更新当前最长公共前缀的长度n, 和当前最长公共前缀common。(44ms)
class Solution:
def longestCommonPrefix(self, strs) :
if not strs:
return ""
n=len(strs[0])
for word in strs:
n=min(n,len(word))
common=strs[0][:n]
for index,item in enumerate(strs):
i=0
while(i<n and item[i]==common[i]):
i+=1
n=min(n,i)
common=common[:n]
return common
方法三:python里的字符串可以通过ascii的形式进行比较,所以只要找出最大的字符串和最小的字符串进行比较,就可以找到最长公共前缀。40ms
class Solution:
def longestCommonPrefix(self, strs) :
if not strs:
return ""
mins=min(strs)
maxs=max(strs)
for index, item in enumerate(mins):
if maxs[index] != mins[index]:
return mins[:index]
return mins
方法四:用zip函数组合最大字符串和最小字符串。40ms
class Solution:
def longestCommonPrefix(self, strs) :
if not strs:
return ""
strs.sort()
res = ""
for x, y in zip(strs[0], strs[-1]):
if x == y:
res += x
else:
break
return res
方法五:同方法二。60ms。
class Solution:
def longestCommonPrefix(self, strs) :
if not strs:
return ""
n=len(strs)
res=""
for i in range(1,n):
m=min(len(strs[i]),len(strs[0]))
for j in range(m):
if strs[i][j]==strs[0][j]:
res+=strs[i][j]
else:break
if ""==res:
return res
else:
strs[0]=res
res=""
return strs[0]
参考博客: https://blog.csdn.net/qq_32424059/article/details/88357820