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

时间:2022-06-25
本文章向大家介绍【LeetCode03】查找字符串最长公共前缀,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。

示例 1:

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

示例 2:

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

说明:

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

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

图来自网络

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

主要思路如下:

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

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

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

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

[True, True, False, False]

3 )查找第一次出现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 认为这是他的错误,因此选择成为蜘蛛侠来拯救世界上更多的人。 漫画首次聚焦于一个青少年英雄身上,这在当时算是一个突破了,也让那些年轻读者很容易产生共鸣,后来这个漫画形象拍了好些动画和剧集,包括最近几年取得超级成功的三部电影。同时,在“惊奇”漫画出品的一系列漫画书中,蜘蛛人也在成长,从一个害羞的高中生到一个困扰的大学生再到一个结了婚的教师,以及成为了超级英雄团队“复仇者”里的一员。