最长公共前缀_字符串

该算法首先按字符串长度排序列表,然后从最短的字符串开始,逐个字符比较,找到最长的公共前缀。当发现不匹配的字符时,截断当前公共前缀。最终返回的结果是所有字符串的最长公共前缀。
摘要由CSDN通过智能技术生成

给一个元素是字符串的列表,要求给出所有元素的最长公共前缀

题目链接:14. 最长公共前缀 - 力扣(Leetcode)

思路:

1. 先将字符串列表按照长度从小到大排序,避免不排序在后面对比时还需要处理边界问题

2. 先将最短的作为结果,在依次比较后面的字符串,更新结果


from functools import cmp_to_key
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:

        def sort_way(x,y):
            if len(x) > len(y):return  1
            else:return -1
        # 自定义排序方式

        strs.sort(key=cmp_to_key(sort_way))
        res = strs[0]
        for i in range(1,len(strs)):
            if len(res)==0:return ""
            # 如果更新res过程中发现已经没有公共前缀了就结束
            for j in range(len(res)):
                
                if strs[i][j] != res[j]:
                    res = res[:j]
                    break
            # i是字符串,j是字符串中的字符
        return res
                


res = res[:j]    i字符串的索引为j的字符与res(先保存的最长公共前缀),那么 res[j]开始就不是最长公共前缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值