LeetCode:14.最长公共前缀 Python3 | min()、enumerate()、set()、zip()

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

示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”

示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
示例 3:
输入:[""]
输出:""

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

思路:
最长公共前缀的最大长度为strs中长度最短的那个字符串,也就是说输出结果最多是strs中长度最短的那个字符串,所以我们就把这个最短的字符串shortest_str找出来,用这个字符串中的所有字母和strs中每一个字符串中的每一个字母进行一一匹配。例如当匹配到第三个字母时,发现有不匹配现象,则说明只有前两个字母匹配,输出shortest_str[:2]即为第0和1位置上的字母。
如果例子为[‘ca’,‘a’],没有匹配项,则输出shortest_str[:0],从0到0不包括0,输出为空。
zip()函数的用法
enumerate()枚举函数:返回两个参数,下标和每一个字符(一般与for循环连用)
set()函数:返回一个无序不重复的元素集合
min()函数的用法

# 方法一:
class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        #判断是否为空(leetcode中国里的编译器是个哈皮,有问题,咋搞都不通过,尤其是shortest_str那一句一直报错,它的函数库貌似有问题,不识别min()函数)
        if strs==[""]:
            return ""
        #或者:
        #if not strs:
        #    return ''
        # 找到最短的字符串
        else:
            shortest_str = min(strs, key=len) #返回长度最短的那个字符串,作为一个新的字符串/匹配对象
            # 转换为枚举对象
            for i_th, letter in enumerate(shortest_str): #enumerate()函数,返回两个参数,下标和每一个字符

                for other in strs:

                    if other[i_th] != letter:

                        return shortest_str[:i_th]
 #方法二:大致思路与方法一一致,这里只是利用zip(*)函数一次将strs中所有的字符串拆开解压成字母,并以最短字符串长度作为最长匹配长度。
 class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ''
        for i_th, word in enumerate(zip(*strs)):
            if len(set(word)) > 1: #返回一个无序不重复的元素集
                return strs[0][:i_th]
        else:
            return min(strs)
            #l = ["flow", "flower","flowaa"]
            #print(min(l))
            #结果:flow

LeetCode:14.最长公共前缀 Python3 | min()、enumerate()、set()、zip()_第1张图片

你可能感兴趣的:(腾讯精选练习(50题),LeetCode,#,代码/源码)