最长公共前缀--------leetcode刷题

本文介绍了两种Python实现寻找多个字符串最长公共前缀的方法:一种是利用sort函数按字典序排序,另一种是使用zip和set判断每个位置字符是否相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:

求解思路:

1.横向扫描:

定义一个实现比较两个字符串最长公共前缀的函数:LCP

LCP(S1.....Sn)=LCP(LCP(LCP(S1,S2),S3),......Sn)

2.纵向扫描:

从前往后遍历所有字符串的每一列

3.基于python特性的求法

3.1使用列表sort函数:

思路:strs.sort()函数,在列表内容是字符串的时候,会按位依次比较阿斯克码值,也就是说abb一定会在abc的前面,那么我们进行排序后,只需要比较strs[0]与strs[-1]的最长前缀就能实现了:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        strs.sort()
        length,index = min(len(strs[0]),len(strs[-1])),0
        while index < length  and strs[0][index] == strs[-1][index]:
            index +=1
        return strs[0][:index]

3.2 利用zip与set

思路:使用zip组合str对象的时候,譬如a ='aabbcc',b='ccdd',使用zip(a,b)时,会获得一个
{[a,c],[a,c],[b,d],[b,d]}的元组对象,那么我们使用set(zip(a,b)[index])是不是就能按位判断了

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        index = 0
        for comba in zip(*strs):
            if len(set(comba)) == 1:
                index +=1
            else:
                break
        return strs[0][:index]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渊兮旷兮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值