编写一个函数,在字符串数组中找出最长的公共前缀字符串,如果没有公共前缀,则返回一个空字符串""。 示例:输入: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”
答案 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()
将在第一次失败时终止检查。然后它再次尝试使用较短的候选前缀,直到所有单词都以此开头,或者前缀为 ''
。