【Python】LeetCode刷题之最长公前缀,思路1(纵向扫描)比较单词同一位置的字符是否相同

简介: 思路1(纵向扫描)比较单词同一位置的字符是否相同

最长公前缀

题目

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

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

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:

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

提示:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-common-prefix

解题思路

纵向扫描
在这里插入图片描述

通过循环,判断列表里这几个字符串同一个位置的字符是否相同,如果相同作为前缀组成部分,不相同就结束循环并输出前面相同的部分。

判断相同可以用集合的互异性,如果这几个字符相同集合就一个字符,长度为1。

返回元组

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象

strs = ["flower","flow","flight"]
s = ""
for i in zip(*strs):
    print(i)

在这里插入图片描述

转为集合

然后将这一个个元组转为集合

strs = ["flower","flow","flight"]
s = ""
for i in zip(*strs):
    print(i)
    n = set(i)
    print(n)

在这里插入图片描述
集合会将重复的元素去除!

判断集合长度是否为1

strs = ["flower","flow","flight"]
s = ""
for i in zip(*strs):
    print(i)
    n = set(i)
    print(n)
    if len(n) == 1:
        s += i[0]
    else:
        break
print(s)

如果为1就作为前缀。
在这里插入图片描述
输出最长公前缀!

代码整合:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        s = ""
        for i in zip(*strs):
            print(i)
            n = set(i)
            print(n)
            if len(n) == 1:
                s +=i[0]
            else:
                break
        return s

提交结果

在这里插入图片描述
虽然不高,不过也是一种解法!

优化

def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        n = list(map(set, zip(*strs)))
        s = ""
        for m, i in enumerate(n):
            i = list(i)
            if len(i) == 1:
                s +=i[0]
            else:
                break
        return s

在这里插入图片描述

目录
相关文章
|
4天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
82 2
|
10天前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
64 36
|
4天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
7天前
|
索引 Python
python之判断字符里面有没有|8
python之判断字符里面有没有|8
|
7天前
|
Python
Python ASCII码与字符相互转换
Python ASCII码与字符相互转换
|
11天前
|
Python
[oeasy]python035_根据序号得到字符_chr函数_字符_character_
本文介绍了Python中的`ord()`和`chr()`函数。`ord()`函数通过字符找到对应的序号,而`chr()`函数则根据序号找到对应的字符。两者互为逆运算,可以相互转换。文章还探讨了单双引号在字符串中的作用,并解释了中文字符和emoji也有对应的序号。最后总结了`ord()`和`chr()`函数的特点,并提供了学习资源链接。
16 4
|
16天前
|
Unix 编译器 C语言
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ordinal_
[oeasy]python034_计算机是如何认识abc的_ord函数_字符序号_ord
13 0
|
2月前
|
数据采集 Python
|
2月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
下一篇
无影云桌面