该题目经常见,以前看到这种题很头疼,觉得没有思路,估计是实际业务干多了,渐渐的看到题目脑子就会有一定的思路,特此记录,激励激励自己~
题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
思路:
如果要找最长公共前缀,肯定和长度最短的字符串有关。最长也不可能比列表里面最短的字符串还要长,所以首先确定哪个是最短的。
然后逐渐比对。
代码如下:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 获取整个列表中长度最小是多少
strs_min = min([len(_) for _ in strs])
# 获取长度最小的字符串,这里可能会有多个哟
min_strs = list(filter(lambda x:len(x) == strs_min, strs))
# forword记录最长公共前缀,先给默认值
forward = min_strs[0]
# 循环遍历
for s in strs:
# 最长公共前缀的长度可能会变,需要记录
ml = len(forward)
temp = "" # 临时变量,记录最长公共前缀的变化
if s == min_strs[0]:
# 相同的不必要统计
continue
for i in range(ml):
# 对比
if s[i] == min_strs[0][i]:
temp += min_strs[0][i]
else:
break
forward = temp
return forward