要求
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
核心代码
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
return os.path.commonprefix(strs)
另一解法
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
min_l = len(strs[0])
for word in strs:
min_l = min(min_l,len(word))
common = strs[0][:min_l]
for index,item in enumerate(strs):
i = 0
while i < min_l and item[i] == common[i]:
i += 1
min_l = min(min_l,i)
common = common[:min_l]
return common
第三种解法
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
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
第四种解法
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
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
解题思路:第一种解法:我们使用os库中path.commonprefix获取最长公共前缀,返回list中,所有path共有的最长的路径。第二种解法:我们首先先获取到所有单词中最小长度的单词的长度,在拿到第一个单词的该长度的截断的字符串,然后我们遍历我们的词语列表,我们用个计数的方式,来扫描每个单词和最长公共部分的重和的长度,不断的更新长度,扫描一圈,就能得到所有单词的公共长度。第三种解法:字符串可以通过ascii的形式进行比较,所以只要找出最大的字符串和最小的字符串进行比较,就可以找到最长公共前缀。第四种解法:和第三种解法的思路相同,找出最大的字符串和最小的字符串进行比较。