Leetcode 14. 最长公共前缀

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

思路: 纵向比较

  1. 求最长公共前缀势必这个prefix的len最大为长度最小的string;
  2. 取出这个最短string的每一位字符与所有string的相应位置比较,相同则加到common上,这里我用了内置函数all(),当所有的string都满足第i位==tmp,返回true,这个tmp则是第i位的公共前缀;
  3. 一旦遇到有不同的前缀,直接跳出循环,返回common。

Note:
all() 函数用于判断给定的 可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
元素除了是 0、空、None、False 外都算 True。
也就是all括号里的判断必须是[condition for xxxxx],类似这种可迭代的内容,把all(condition)写在一个for循环里会报错。

你可能感兴趣的:(Leetcode 14. 最长公共前缀)