【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

在这里插入图片描述

目录
相关文章
|
2月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
50 0
|
2月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
97 0
Leetcode第三题(无重复字符的最长子串)
|
2月前
|
算法
Leetcode第十四题(最长公共前缀)
这篇文章介绍了一种算法,用于在给定的字符串数组中找到最长公共前缀,通过逐字符比较每个字符串的对应位置,一旦发现不匹配立即返回当前已匹配的子串作为公共前缀。
26 0
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
121 2
|
28天前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
19 1
|
3月前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
110 36
|
1月前
|
人工智能 开发工具 Python
[oeasy]python040_缩进几个字符好_输出所有键盘字符_循环遍历_indent
本文探讨了Python代码中的缩进问题。通过研究`range`函数和`for`循环,发现缩进对于代码块的执行至关重要。如果缩进不正确,程序会抛出`IndentationError`。文章还介绍了Python的PEP8规范,推荐使用4个空格进行缩进,并通过示例展示了如何使用Tab键实现标准缩进。最后,通过修改代码,输出了从0到122的字符及其对应的ASCII码值,但未能找到竖线符号(`|`)。文章在总结中提到,下次将继续探讨竖线符号的位置。
12 0
|
2月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
50 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
3月前
|
索引 Python
python之判断字符里面有没有|8
python之判断字符里面有没有|8
|
3月前
|
Python
Python ASCII码与字符相互转换
Python ASCII码与字符相互转换