我以为我手头有一个非常简单的问题-查找给定字符串的所有子字符串。
我这样做如下:
js
但是性能非常差。在随机生成的长度为900的字符串上,我需要1.5秒。然后,我对每个子字符串进行基于长度的数学运算,这将花费更多的时间,增加3-4秒。
如何改善时间表现?
已经有一个类似的答案here,但它与内存有关。记忆不是我的瓶颈。
答案 0 :(得分:3)
如果考虑当前的起点和起点,则可以将循环迭代次数减半。目前,i + j
通常超过字符串的长度。
代替尝试:
substrings = {p[i:j] for i in range(len(p)) for j in range(i + 1, len(p) + 1)}
在这里,我们更改语义以使i
为起点,j
为终点,并强制j > i
。
这将不包括空字符串""
。适当时添加substrings.add("")
。