编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
实例1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
实例2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
Python解法1:
横向检索:
依次遍历输入的所有字符串,对于每一个遍历到的字符串,更新检索到的前缀。当所有的元素都被遍历完之后就能得到最长公共前缀。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
prefix = strs[0]
for i in range(1, len(strs)):
prefix = self.lcp(prefix, strs[i])
if not prefix:
break
return prefix
def lcp(self, str1, str2):
length = min(len(str1), len(str2))
j = 0
while j < length and str1[j] == str2[j]:
j+=1
return str1[:j]
结果:
解法2:
利用zip函数将输入的字符串中的相同位置的字母进行对比,看看是否相同。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
str = ""
for i in zip(*strs):
temp = set(i)
if len(temp) == 1:
str += i[0]
else:
break
return str
解法3:
对输入的字符串构造字典进行排序,比较第一个字符串与剩下的字符串中是否存在相同的前缀。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
strs.sort()
n=len(strs)
a=strs[0]
b=strs[n-1]
str = ""
for i in range(len(a)):
if i < len(b) and a[i] == b[i]:
str += a[i]
else:
break
return str
结果: