我认为我手头有一个非常简单的问题-找到一个给定字符串的所有子字符串。
我是这样做的:
unique_substrings = list(set([p[i:j+1+i] for i in range(len(p)) for j in range(len(p))]))
但是表现很差。在随机生成的长度为900的字符串上,我需要1.5秒。然后,我对每个子字符串做了一个基于长度的数学运算,这进一步花费了更多的时间,增加了3-4秒。
我怎样才能在时间上提高业绩呢?
here已经有了类似的答案,但它涉及到内存。记忆不是我的瓶颈。
发布于 2018-10-05 23:17:29
如果考虑到当前的起点和点,可以将循环迭代的次数减半。目前,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("")一起添加。
https://stackoverflow.com/questions/52674292
复制相似问题