14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
Solution:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
strs.sort(key=len)
len_common_max = len(strs[0])
common = ''
for i in range(len_common_max):
tmp = strs[0][i]
if all(strs[j][i] == tmp for j in range(len(strs))):
common += tmp
else:
break
return common
思路: 纵向比较
- 求最长公共前缀势必这个prefix的len最大为长度最小的string;
- 取出这个最短string的每一位字符与所有string的相应位置比较,相同则加到common上,这里我用了内置函数all(),当所有的string都满足第i位==tmp,返回true,这个tmp则是第i位的公共前缀;
- 一旦遇到有不同的前缀,直接跳出循环,返回common。
Note:
all() 函数用于判断给定的 可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
元素除了是 0、空、None、False 外都算 True。
也就是all括号里的判断必须是[condition for xxxxx],类似这种可迭代的内容,把all(condition)写在一个for循环里会报错。