14 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:https://leetcode-cn.com/problems/longest-common-prefix/
因为自己比较菜,都是通过学习别人代码来进步的,总结别人的代码如下,其中我遇到没看懂的代码,会努力看懂,并且作为知识记录下来
解法一:
思路:先找到长度最短的单词,然后遍历这个单词,判断单词的元素是否和别的单词在相同的位置上是否相等。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
else:
temp = min(strs, key=len)
for i in range(len(temp)):
for others in strs:
if others[i] != temp[i]:
return temp[:i]
return temp
从中学到的知识1
temp = min(strs, key = len)
没想到min函数还能这样用,min/max函数一些高阶用法可以参考如下
链接:https://www.cnblogs.com/whatisfantasy/p/6273913.html
其中的找出字典中值最大的那组数据很有意思。
如果有一组商品,其名称和价格都存在一个字典中,可以用下面的方法快速找到价格最贵的那组商品:
prices = { 'A':123, 'B':450.1, 'C':12, 'E':444}
max_prices = max(zip(prices.values(), prices.keys()))
对于zip函数的用于总结如下:
zip(*iterables):
函数定义:从参数中的多个迭代器取元素组合成一个新的迭代器;
输入:元组,列表,字典等迭代器
输出:返回一个zip对象,其内部元素为元组;可以转化为列表或元组;
当zip函数中只有一个参数时:依次从参数中取出一个元素,组成新的一个元组
list1 = [1, 2, 3, 4]
for i in zip(list1):
print(i)
输出:
(1,)
(2,)
(3,)
(4,)
当zip函数中有两个参数时:依次从两个参数中分别取出一个元素,并且组成新的一个元组,每个元组中含有两个元素
list1 = [1, 2, 3, 4]
list2 = [5,6,7,8]
for i in zip(list1, list2):
print(i)
输出:
(1, 5)
(2, 6)
(3, 7)
(4, 8)
list1 = [1, 2, 3, 4]
list2 = [5,6,7,8]
for i,j in zip(list1, list2):
print('i=:',i)
print('j=:',j)
输出:
i=: 1
j=: 5
i=: 2
j=: 6
i=: 3
j=: 7
i=: 4
j=: 8
解法二:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
res = ""
if len(strs) == 0:
return ""
for each in zip(*strs):
if len(set(each)) == 1:#利用集合创建一个无序不重复元素集
res += each[0]
else:
return res
return res
从中学到的知识2
在变量前面加一个*号:
元组变量前加 * 视为对元组解包。解包后的子内容会依次赋值给对应位置的其他变量。
e.g 1.
a = {'a':1,'b':2}
print(*a)
输出:
a b
e.g. 2
a = ["flower","flow","flight"]
print(*a)
输出:
flower flow flight
有一个没看懂的例子:
c = (1, 2, 3, 4, 5)
a, *b = c
print('a=:',a)
print('b=:',b)
输出:
a=: 1
b=: [2, 3, 4, 5]
c = (1, 2, 3, 4, 5)
*a, b = c
print('a=:',a)
print('b=:',b)
输出:
a=: [1, 2, 3, 4]
b=: 5
参考资料:
https://www.cnblogs.com/waltsmith/p/8029539.html
https://www.jianshu.com/p/efe9dd65a842
https://www.zhihu.com/question/339491887
https://blog.csdn.net/qq_34364995/article/details/80274107