新手区 14. Longest Common Prefix

沐芓李 · 2017年05月31日 · 最后由 沐芓李 回复于 2017年06月08日 · 2391 次阅读

题目描述

Write a function to find the longest common prefix string amongst an array of strings.

写一个方法返回一个字符串数组的最长公共前缀。

原文地址

思路方法

公共前缀子串,那每个字符串肯定都包含有,并且在头部。
把数组中最短的字符串作为默认的公共子串,然后依次与每一个字符串对比,计算所有的最大匹配长度。

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        #如果数组为空,则直接返回
        if not strs:
            return ''
        #取值数组中最短的字符串,不然第一个for循环可能会越界
        first = min(strs)
        for i in range(len(first)):
            #依次和数组中每个字符串做对比
            for str in strs:
                if str[i] != first[i]:
                    #返回能匹配上的最大值
                    return first[:i] if i > 0 else ''
        return first

知识点

return first[:i] if i > 0 else ''
"""
python中没有类似C语言的三元条件表达式condition ? true_part : false_part,虽然Python没有三目运算符(?:),但有类似的替代方案,那就是true_part if condition else false_part。
"""
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 4 条回复 时间 点赞
沐芓李 代码入门 中提及了此贴 05月31日 15:05

不知道 python 有没有数组排序的算法?
如果有的话,把数组排序后,直接拿数组第一个和数组最后一个来比较最大共同长度。(java 有数组排序,用的是 mergeSort 空间和时间复杂度都 ok)
如果没有的话,自己写一个数组 mergeSort,再拿数组第一个和数组最后一个来比较最大共同长度。
把循环比较换成数组排序再比较,降低时间复杂度

chenDoInG 回复

我没看懂你这个思路,你是不是回头不是这个题目啊。我觉得对数组排序么有意义啊~

按照什么排序,字符串长度嘛?
排序完,求出来数组第一个和数组最后一个来比较最大共同长度,可是这确保是所有的公共前缀嘛?

再详细说一下?

沐芓李 回复

字符串数组排序,会按照字符顺序排序,比如 a,aa,ab,aab 排序后的话就是 a,aa,aab,ab。那么共同前缀就是数组第一个 a 和数组最后一个 ab 的共同前缀 a

chenDoInG 回复

明白你说的意思了 mergeSort 排序规则是每个字符串的字符大小

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册