编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
方法一:
使用两个嵌套的循环来比较每个字符串的字符,从而找到它们的最长公共前缀。
- 检查字符串列表是否为空,如果是,则返回空字符串。
- 从第一个字符串的第一个字符开始,逐个比较每个字符串的对应字符,遇到不匹配的字符时,返回最长公共前缀。
- 循环完成后仍然没有找到最长公共前缀,说明第一个字符串 strs[0] 就是所有字符串的公共前缀,因此直接将其作为结果字符串返回。
class Solution(object):
def longestCommonPrefix(self, strs):
if not strs:
return ""
re_str = ""
for i in range(len(strs[0])): # 遍历第一个字符串
for j in range(1, len(strs)): # 遍历剩下的字符串
if i >= len(strs[j]) or strs[j][i] != strs[0][i]: # 如果第一个字符串长度大于当前字符串,或者当前字符不相等,则返回当前字符串,否则添加到结果中
return re_str
re_str += strs[0][i] # 所有字符串当前位置的字符都相同,添加到结果中
return re_str
方法二:
可以将字符串列表按字母顺序排序,然后比较第一个字符串和最后一个字符串的相应字符,因为它们是列表中最不相似的字符串,其最长公共前缀将是所有字符串的公共前缀。只需要比较最不相似的字符串。
class Solution(object):
def longestCommonPrefix(self, strs):
if not strs:
return ""
strs.sort() # 排序
re_str=""
for i in range(len(strs[0])): # 遍历第一个字符
if strs[0][i]==strs[-1][i]: #如果第一个字符当前位置和最后一个字符当前位置相等,则添加到结果中
re_str += strs[0][i]
else: # 不是所有字符都相同,退出循环,返回前缀
break
return re_str # 返回最长公共前缀