最长公共前缀
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:
如果prefix
在st
中的任何位置,这将是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。