LeetCode5:最长公共前缀

今日题目

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例:

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:
所有输入只包含小写字母 a-z 。

分析

LeetCode5:最长公共前缀_第1张图片

解题

根据上面思想直接敲~
双重for循环时间复杂度:应该不到O(n^2)

class Solution():
    def longestCommonPrefix(self,strs):
        len0 = len(strs)
        if len0 == 0:
            return 0
        list_len = []
        # 找出最短的字符串长度
        for i in range(len0):
            list_len.append(len(str[i]))
        list_len.sort()
        print(list_len)
        # 取出最短的子串
        # 我这里是直接取第一个子串的前min_len
        com_str = strs[0][0:list_len[0]]
        b0 = com_str
        for s in strs:
            for i in range(list_len[0]):
                if s[i] != com_str[i]:
                    # 判断到有不等的地方
                    a0 = s[0:i]
                    if len(b0) >= len(a0):# 上一个最长公共前缀是否比现在长
                        b0 = a0
        return b0

a = Solution()
str = ["flower","flow","flight"]
print(len(str[1]))
result = a.longestCommonPrefix(str)
print(result)

大牛

一层for循环时间复杂度:O(n)

class Solution():
    def longestCommonPrefix(self,strs):
        res = ''
        if len(strs) == 0:
            return ''
        # zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
        for each in zip(*strs):
            # 利用集合创建一个无序不重复元素集
            print(each)
            print("------------")
            if len(set(each)) == 1:
                res += each[0]
            else:
                return res
        return res
a = Solution()
str = ["flower","flow","flight"]
print(len(str[1]))
result = a.longestCommonPrefix(str)
print(result)

来自 老表 https://mp.weixin.qq.com/s/YPfCRxAfd2IkaiQi-pMUHA
老表《简说Python》提供
向林
2020年2月4日于重庆城口
好好学习,天天向上,终有所获

你可能感兴趣的:(LeetCode)