【发布时间】:2017-02-13 19:59:59
【问题描述】:
我有一个字符串列表,例如:
py
python
co
comp
computer
我只是想得到一个字符串,它包含尽可能多的前缀。结果应该是“computer”,因为它的前缀是“co”和“comp”(2 个前缀)。
我有这个代码(wordlist 是字典):
for i in wordlist:
word = str(i)
for j in wordlist:
if word.startswith(j):
wordlist[i] += 1
result = max(wordlist, key=wordlist.get)
有没有更好、更快的方法来做到这一点?
【问题讨论】:
-
一项改进是删除
word = str(i)部分,只删除变量i。如果i已经是字符串,则没有理由对其进行转换。除非我遗漏了一些非常明显的东西...... -
你也许可以使用基数树,但我认为这仍然是 O(n^2)
-
@PatrickHaugh 为什么会是 O(n**2)?您可以简单地遍历所有叶子并计算叶子和根节点之间的终端节点。
-
@EricDuminil 您还必须构建树。我认为这是最坏的情况 n**2
-
@PatrickHaugh 它是 O(m*n),其中 n 是单词数,m 是平均单词长度。在上述情况下,
m可能是有界的,所以它是 O(n)
标签: python string performance python-3.x prefix