力扣-算法练习(Python)

  • Post author:
  • Post category:python


14.最长公共前缀

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

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

示例1:

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

输出: “fl”

示例2:

输入: [“dog”,“racecar”,“car”]

输出: “”

解释: 输入不存在公共前缀。

说明:

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

第n次尝试(错的)

class Solution(object):
    def longestCommonPrefix(self, strs):
        ss = ""
        if len(strs) == 0:
            return ""
        if len(strs) == 1:
            return strs[0]
        else:
            if strs[0] != "":
                res = []
                for s in strs:
                    r = list(s)
                    res.append(r)
                for i, x in enumerate(res):
                    if i + 1 < len(res):
                        if res[i][0] == res[i + 1][0]:
                            ss = '' + res[i][0]
                            if res[i][i] == res[i + 1][i]:
                                ss = ss + res[i][i]
                        else:
                            ss = ""
            return ss

感觉越写越陷入死胡同,被循环绕晕了==*

思路:把每个字符串拆成一个个字母再存到列表中,然后再用循环去一个个比较字母,相同的字母再存到一个新的字符串中,最后返回。

第一次失败,没考虑输入值为

[]

,然后加了个

if len(strs)==0

的判断

第二次失败,没考虑输入值为

["a"]

,然后加了个

if len(strs) == 1

的判断

第三次失败,没考虑输入值为

["",""]

,然后加了个

if strs[0] != ""

的判断

第四次失败,没考虑输入值为

["a","a"]

,开始思考,,,感觉不太行,害

乖乖跑去看大佬的解答,看到个挺好的

# 取一个单词 s,和后面单词比较,看 s 与每个单词相同的最长前缀是多少!遍历所有单词。
class Solution:
    def longestCommonPrefix(self, s: List[str]) -> str:
        if not s:
            return ""
        res = s[0]
        i = 1
        while i < len(s):
            while s[i].find(res) != 0:
                res = res[0:len(res)-1]
            i += 1
        return res
        
作者:powcai
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/duo-chong-si-lu-qiu-jie-by-powcai-2/
来源:力扣(LeetCode)

哭了哭了,孩子累了



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