[算法题python]14. 最长公共前缀

发布时间 2023-08-02 15:27:41作者: 雀雀飞了

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

 

示例 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:
        s = ""
        for i in zip(*strs):
            if  len(set(i)) == 1:
                s += i[0]
            else:
                break
        return s

解题思路:

摘自python3.8的官方文档

zip(*iterables)

创建一个聚合了来自每个可迭代对象中的元素的迭代器。 返回一个元组的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。

例如输入的是:

["flower","flow","flight"]
 

在zip里的for循环打印出i是这样的

('f', 'f', 'f')
('l', 'l', 'l')
('o', 'o', 'i')
 

也就是官方文档所说的“其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素”

为什么只迭代到 ('o', 'o', 'i') 呢?

是因为“当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代”

最后再利用 set 的key不重复的特性进行判断