【发布时间】:2022-09-30 18:54:20
【问题描述】:
我已经完成了代码挑战的尝试,其中我必须找出单词列表之间的最长前缀。我认为(希望)我的解决方案还可以,但效率不够高,因此无法运行,有人可以建议对我的代码进行优化吗?非常感谢您的帮助,请忽略任何愚蠢的错误-我仍在学习:(。 单词是 [\"flower\",\"flow\",\"flight\"] 和 [\"dog\",\"racecar\",\"car\"]
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if len(strs) == 0:
return(\"\")
if len(strs) == 1:
return(strs[0])
prefix = strs[0]
wordLength = len(strs)
for i in range(wordLength):
while prefix != strs[i+1]:
prefix = prefix[:-1]
if len(prefix) == 0:
return(\"\")
return(prefix)
-
请通过显示这两个列表的预期输出来澄清
-
这段代码看起来有问题。例如,在
for循环中,i的范围从0到len(strs)-1。所以在最后一次迭代中,i+1是len(strs),所以strs[i+1]是一个越界引用。您可能希望将strs[i+1]更改为strs[i],并将for循环更改为for i in range(1, wordLength)。 -
但这似乎仍然不对。它修复了索引错误,但
while循环没有进行前缀比较。它正在减少prefix并且它匹配全部的字符串,而不是它的开头。你可能想要strs[i].startswith(prefix)。 -
在风格上,在 Python 中使用
return(val)是不寻常的。只需使用return val。括号没有任何作用。
标签: python