Leetcode刷题记录 最长公共前缀

Leetcode 刷题记录 14.最长公共前缀

问题描述

问题描述

自己的解题方法

  1. 以strs中第一个字符串S为参照
  2. 遍历S的每一个元素,遍历strs中的每一个字符串,如果元素不相同,停止遍历,如果相同,返回相同的前f个元素
代码如下:
class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) == 0:
            return ""
        if len(strs)==1:
            return strs
        s=strs[0]
        flag=0
        f=0
        for i in range(len(s)):

            for j in range(1,len(strs)):
                if i>=len(strs[j]):
                    break

                if strs[j][i]!=s[i]:
                    flag=0
                    return s[0:f]

                else:
                    flag+=1
                if flag==len(strs)-1:
                    f+=1
            flag=0
        return s[0:f]
结果如下图

在这里插入图片描述

其他方法

该方法利用了python的zip函数以及set函数

zip(): 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回这些元组组成的列表,如果迭代器元素个数不一致,则返回列表长度与最短对象相同。利用*操作符,可以将元组分解成列表
例:

strs=["dog","docecar","dor"]
print(list(zip(*strs)))

注:输出时需要将zip转化成list,输出结果如下:
在这里插入图片描述

set( ): 集合是一个无序不重复元素序列可以使用大括号{}或者set()函数创建集合,创建空结合必须使用set()而不是{ },因为{ } 是用来创建一个空字典的

代码如下
    def longestCommonPrefix(self,strs):

        print(list(zip(*strs)))

        res=""
        for temp in zip(*strs):
            temp_set=set(temp)
            if len(temp_set)==1:
                res+=temp[0]
            else:
                break
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值