最长公共前缀

时间:2021-06-29 13:46:37

标签: python string while-loop longest-prefix

编写一个函数,在字符串数组中找出最长的公共前缀字符串,如果没有公共前缀,则返回一个空字符串""。 示例:输入: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 ""

输入:["花","流","飞行"] 输出:“flo” 预期输出:“fl”

1 个答案:

答案 0 :(得分: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() 将在第一次失败时终止检查。然后它再次尝试使用较短的候选前缀,直到所有单词都以此开头,或者前缀为 ''