【LeetCode03】查找字符串最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:  

输入: ["flower","flow","flight"]输出: "fl"  

示例 2:

输入: ["dog","racecar","car"]  输出: ""  解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。


先思考一下,后面我会给出一个解题思路~?


640?wx_fmt=other

图来自网络


这道题主要考核的还是python的zip和set的用法,如果对这两个熟悉的话就可以很容易的实现。


主要思路如下:

)找出列表Strs 里,每个字符串的第k位(k=0,1,2,3...),组成一个集合k

如列表Strs = ["flower","flow","flight"],执行(1)后,得到:

{'f'}
{'l'}
{'i', 'o'}

{'w', 'g'}


)判断集合的长度是否为1,如果是,标记为True,否则为False

[True, True, False, False]


)查找第一次出现False的位置,返回最长前缀。

即第3位,所以最长前缀为 strs[0][:,2]

(strs[0] 代表字符列表里的第一个字符串) 


Python实现:

def longestCommonPrefix(self, strs: List[str]) -> str:
    try:
        is_same=[] # 用于储存当前字符是否一致
        for _ in zip(*strs):
            is_same += [len(set(_)) == 1]
        is_same+= [False# 防止只有一个长度的字符串,如['a'], 那么is_same只会有True,没有False,会报错
        return strs[0][:is_same.index(False)] 

    except:
        # 其他情况返回空
        return ''



以上的逻辑,还可以用更加极客优美的短语法完成。

Python实现:

def longestCommonPrefix(strs) -> str:
    is_same = [len(set(c)) == 1 for c in zip(*strs)] + [False]
    return strs[0][:is_same.index(0)] if strs else ''



? 配图角色背景介绍:

蜘蛛侠初次登场是在1962年8月,在杂志惊奇幻想(Amazing Fantasy)第15期,后来十分受欢迎才有了以他为主题的漫画。
Peter Parker在一次课外活动中,意外的被一只受过放射性感染的蜘蛛咬伤后,获得具有蜘蛛一般的特殊能力。而改变Peter Parker的一生,决定成为蜘蛛侠的关键,就在于班叔叔(Uncle Ben)遭人伤害,Peter 认为这是他的错误,因此选择成为蜘蛛侠来拯救世界上更多的人。
漫画首次聚焦于一个青少年英雄身上,这在当时算是一个突破了,也让那些年轻读者很容易产生共鸣,后来这个漫画形象拍了好些动画和剧集,包括最近几年取得超级成功的三部电影。同时,在“惊奇”漫画出品的一系列漫画书中,蜘蛛人也在成长,从一个害羞的高中生到一个困扰的大学生再到一个结了婚的教师,以及成为了超级英雄团队“复仇者”里的一员。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值