# 参数1为可迭代对象
# func是单参数函数
# default在iterable为空时返回
min(iterable, *[, default=obj, key=func]) -> value
# 没有default参数
min(arg1, arg2, *args, *[, key=func]) -> value
默认key(比较大小的方式):
字符串是一个一个字符地比较,而不是比较字符串所有字符的总大小
常见func:
匿名函数lambda x: len(x)
一个例子:
结果分析:
第一个字符中b最大,所以对应的这串字符不再参与之后第二、第三个字符的比较
# 参数解析同min()
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
一个例子:
结果分析:
首字符定大小
相关算法题
最长公共前缀字符
输入:[‘flower’, ‘flow’, ‘fly’],[],[""],[“a”],[“a”,“a”],[“a”,“b”]……
输出:‘fl’,没有则’’
非常多种输入可能
'''解法一'''
class Solution:
def longestCommonPrefix(self , strs ):
# write code here
'''要考虑好多循环前提,谨记!'''
# 行,列表元素数
rows = len(strs)
# 如果是空列表,返回''
if not rows:
return ''
# 列,每个元素(字符串)的长度
cols = len(strs[0])
# 如果每个元素都为空,返回''
if not cols:
return ''
# 列表至少1个元素,且该元素不为空,才能循环
for i in range(cols):
cur = strs[0][i]
# 如果有第2个元素,才能比较
if rows > 1:
for j in range(1, rows):
# 有的元素比第1个元素短,没有[i],则返回已经比较过相等的前i个字符
if i==len(strs[j]) or strs[j][i] != cur:
return strs[0][:i]
# 没有第2个元素,不能比较,第1个元素就是最长的
else:
return strs[0]
# 比到第1个元素的末尾,还没有中途return,则最长前缀就是第1个元素
# if i == cols-1:
return strs[0]
'''解法二:'''
class Solution:
def longestCommonPrefix(self , strs ):
# write code here
'''考虑的东西也好多,永远不能一次bug free'''
str0 = min(strs, default='')
str1 = max(strs, default='')
# 空列表,或列表元素有空字符串,min()都返回空
if not str0:
return ''
# 如果str0和str1都有内容
# 那判断这两个极端情况的公共前缀即可
for i in range(len(str0)):
if str1[i] != str0[i]:
return str0[:i]
return str0