-1

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

4

1 回答 1

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-06-29T14:04:29.233 回答