python min()和max()解最长公共前缀

# 参数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大,所以这串字符不再参与之后第二第三个字符的比较
结果分析
第一个字符中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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值