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
②集合是无序的

浙公网安备 33010602011771号