最长公共前缀

Posted

技术标签:

【中文标题】最长公共前缀【英文标题】:Longest Common Prefix 【发布时间】:2021-09-11 17:45:26 【问题描述】:

编写一个函数,在字符串数组中查找最长的公共前缀字符串如果没有公共前缀,则返回一个空字符串“”。 示例:输入:strs = ["flower","flow","flight"] 输出:“fl” 我是编码新手,并尝试解决这个问题(来自 leetcode)。我的方法是搜索字符串之间最短的字符串,这是我的代码,我不知道我在哪里做错了,似乎while循环根本不起作用。如果有人可以帮助我,我将不胜感激。这是我的代码:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        string = ""
        len_st = []
        for st in strs:
            len_st.append(len(st))
        m = min(len_st)
        prefix = strs[len_st.index(m)]
        while prefix:
            for st in strs:
                if prefix in st:
                    continue
                else:
                    prefix = prefix.replace(prefix[-1], "")
                break
            return prefix
        else:
            return ""

输入:["flower","flow","flight"] 输出:“flo” 预期输出:“fl”

【问题讨论】:

你有一个for 循环,最后一行是break。这意味着它只会迭代一次。 while 相同,最后一行是return if prefix in st: 如果prefixst 中的任何位置,这将是True - 而不仅仅是在开头。您可以改用startswith()。 *已编辑 - 修正错字。 【参考方案1】:

根本不需要手动循环。让 Python 为你做这件事。

def longestCommonPrefix(self, strs: List[str]) -> str:
    assert len(strs) > 0
    prefix = min(strs,key=len)
    while not all(s.startswith(prefix) for s in strs):
        prefix = prefix[:-1]
    return prefix

这使用min() 来返回最短的单词(或者如果它们的话)并选择它作为候选前缀。然后它检查是否所有提供的单词都以前缀开头。调用all() 将在第一次失败时终止检查。然后它再次尝试使用较短的候选前缀,直到所有单词都以该前缀开头,或者前缀为''

【讨论】:

以上是关于最长公共前缀的主要内容,如果未能解决你的问题,请参考以下文章

2021-09-15:最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 ““。力扣14。

最长公共前缀数组

力扣专题——14. 最长公共前缀——最长公共前缀C语言解法

LeetCode:最长公共前缀14

LeetCode 7最长公共前缀

最长公共前缀