LeetCode in Python-14. Longest Common Prefix 最长公共前缀

  1. 题目
  2. 解法1、逐位比较
  3. 解法2、利用集合性质
  4. 解法3、zip+sets
  5. 解法4、借助os模块自带函数。。。
  6. 出处

题目

最长公共前缀

解法1、逐位比较

class Solution:
    def longestCommonPrefix(self, strs):
        if not strs:
            return ""
        for i in range(len(strs[0])):
            for string in strs[1:]:
                if i >= len(string) or string[i] != strs[0][i]:
                    return strs[0][:i]
        return strs[0]# 当strs = [""]时,strs视为存在,所以此处我们直接返回第一个元素,即“”

以第一个单词作为基准,不同就返回前i位
注意第二个单词可能比第一个单词短,防止超出循环范围,先比较i >= len(string)

解法2、利用集合性质

class Solution:
    def longestCommonPrefix(self, strs):
        result = ""
        i = 0
        while True:
            try:
                sets = set(string[i] for string in strs)
                if len(sets) == 1:
                    result += sets.pop()
                    i += 1
                else:
                    break
            except Exception as e:
                break
        return result

1、分别把所有单词的对应位放入集合,若集合长度不为1就返回
2、用while True时注意及时跳出,常借助try except

解法3、zip+sets

class Solution:
    def longestCommonPrefix(self, strs):
        r = [len(set(c)) == 1 for c in zip(*strs)] + [0]
        return strs[0][:r.index(0)] if strs else ''

1、zip()解压,zip(star)的结果(输入:strs = [“flower”, “flow”, “flight”])
zip(*star)
2、因为在python中0==False,此处index(0)结果为2

解法4、借助os模块自带函数。。。

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        return os.path.commonprefix(strs)

出处

1、2、https://www.bilibili.com/video/av45842114
3、对应题目下Knife丶的题解


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 452966517@qq.com

文章标题:LeetCode in Python-14. Longest Common Prefix 最长公共前缀

文章字数:363

本文作者:Night Zhang

发布时间:2019-07-26, 17:30:28

最后更新:2019-07-26, 17:33:06

原始链接:https://night-zhang.github.io/2019/07/26/LeetCode-in-Python-14-Longest-Common-Prefix-最长公共前缀/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

github