Leetcode 24 最长公共子前缀

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

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

示例 1:

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

示例 2:

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

说明:

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

解答:

一开始想的是将列表中每个元素都转换成列表的形式,

以第一个利用元素为标准,后面每个元素都和第一个元素作比较,

得出公共子前缀,

然后用集合来创建一个不重复的集合来存放公共子前缀,

但由于集合是无序的,最后输出的结果是公共字母不是公共子前缀

最后没想出解决方法,参考了别人的

 

 

别人的解答:

def longestCommonPrefix(strs):
    result = ''
    if len(strs)==0:
        return ''
    for i in zip(*strs):#i:('f','f','f')
        '''zip()函数可用于将可迭代对象作为参数,
        将对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表这里的zip(*strs)是列表类型,i是元组,
        x = [1, 2, 3]
        y = [4, 5, 6]
        z = [7, 8, 9]
        xyz = zip(x, y, z)
        print xyz
        结果[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
        '''
        #print(type(i))
        if len(set(i))==1:#i是元组类型,利用集合创建一个无序不重复元素集,判断集合长度是否为1,及元素是否相同
            result+=i[0]
        else:
            return result#如果第一个字符不相等直接返回,因为不是前缀了
    return result

注意

    ①zip()函数可用于将可迭代对象作为参数,并将对象中对应的元素打包成一个个元组,然后返回这些元组组成的列表

    (即经zip()函数打包过后的结果是列表,而列表中的元素是元组)

        x = [1, 2, 3]
        y = [4, 5, 6]
        z = [7, 8, 9]
        xyz = zip(x, y, z)
        print xyz
   
    ②集合是无序的
posted @ 2018-06-21 14:36  Aprilnn  阅读(219)  评论(0)    收藏  举报