【LeetCode 简单题】5-用Python求字符串最长公共前缀

声明:

今天是第5道简单题,以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

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

示例 1:

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

 示例 2:

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

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

解法1。最常规的,将题干条件拆解,首先找到最短的字符串min_str长度(最长公共前缀必须不长于最短的字符串),再以输入的字符串组的第一个字符串为基准,逐个比较所有字符串第1、2、3,…,len(min_str)位上的字符是否相等,相等则把该字符存到一个list里,不相等则return这个list,代码如下:

# V 1.0,能提交
class Solution:
    def longestCommonPrefix(self, strs):
        # 一定要在最开始对输入的字符串组strs做判断,这是第一步
        if(strs is None or len(strs) == 0):
            return ''
        # 容器初始化,必须写在预判的后面,如果写在最前面会报错“IndexError: list index out of range”
        # 经过谷歌百度发现这是因为如果strs为空的话就无法取到strs[0],注意,这是第二步
        i = 0
        commonlist = list()
        min_len = len(strs[0])
        # 找出最小的长度
        for s in strs:
            if(len(s) < min_len):
                min_len = len(s)
        # 逐个遍历其他字符串与第一个字符串的每一位字符是否一样,不一样就返回,一样就继续比,并存储比较通过的字符到容器commonlist里
        while i<=min_len-1:
            character = strs[0][i]
            for s in strs:
                if s[i] != character:
                    return "".join(commonlist)
            commonlist.append(character)
            i = i+1
        return "".join(commonlist)

解法2。用zip函数获取一个类似于元组集合的对象,第i个元组存储的是所有字符串的第i个字符,元组个数等于最短的字符串包含的字符个数,所以只需要遍历每一个元组,判断该元组是否只包含一种字符,若是则保存到一个容器中,若不是则返回该容器。

# V 2.0,能提交,使用zip函数
class Solution:
    def longestCommonPrefix(self, strs):
        commonlist = ''
        if(strs is None or len(strs) == 0):
            return ''
        for i in range(len(strs)):
            strs[i] = list(strs[i])
        tmp = zip(*strs) # zip函数的作用见下面解释
        for i in tmp:
            if(set(i) == 1):
                commonlist += i[0]
            else:
                return commonlist
        return commonlist
nums = ['flower','flow','flight']
for i in zip(*nums):
    print(i)

输出:
('f', 'f', 'f')
('l', 'l', 'l')
('o', 'o', 'i')
('w', 'w', 'g')

结尾

解法1:https://blog.csdn.net/weixin_42456864/article/details/80703189

解法2:https://blog.csdn.net/yurenguowang/article/details/77848771

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/81487413