Leetcode 14. 最长公共前缀 Python

题目

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

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

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”

自己解法1(太慢了)

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        
        out = ""
        if strs==[]:return out
            
        for j in range(len(strs[0])):
            p=0
            for i in range(1,len(strs)):
                if j>len(strs[i])-1: break
                if strs[0][j] == strs[i][j]:
                    p = p+1
                else:return out
            if p==len(strs)-1:
                out += strs[0][j]
        return out

在这里插入图片描述
汗颜。

经提示解法(较慢)

class Solution:
            
    def longestCommonPrefix(self, strs: List[str]) -> str:
        out = ""
        if strs==[]:return out #空字符输出
        if len(strs)==1:return strs[0]
        #如果列表长度是1输出第一个字符,节省空间时间
        
        newstrlength = len(min(strs, key=len))  #巧!先把公共长度缩小成列表中最小字符串的长度  
        for j in range(0,len(strs)-1):
            if strs[j]=="":
                return out    #只要有空行就直接输出空字符串(节省时间空间)
            newstrlength=min(len(strs[j+1]),newstrlength)  #长度和下一字符串长度的最小值
            for i in range(newstrlength):
                if strs[j][i] != strs[j+1][i]:
                    newstrlength = i
                    break
            #只要有不一样的,置newstrlength值并进入下一个字符比较循环
        return strs[0][:newstrlength] #返回第一个字符串前公共数个字符就好

在这里插入图片描述

思路:
在这里插入图片描述
虽然效果一样,但是更简洁的办法看
https://tundrazone.com/?p=189

大神

https://blog.csdn.net/qq_34364995/article/details/80274107
非常简洁,但是看不太懂,希望有看懂的同学跟我交流。

        res = ""
        if len(strs) == 0:
            return ""
        for each in zip(*strs):#zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
            if len(set(each)) == 1:#利用集合创建一个无序不重复元素集
                res += each[0]
            else:
                return res
        return res

在这里插入图片描述


版权声明:本文为bluehatihati原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。