python - 查找长 Python 字符串的所有唯一子字符串 - 性能
问题描述
我以为我手头有一个非常简单的问题——找到给定字符串的所有子字符串。
我这样做如下:
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 秒。
如何在时间方面提高性能?
这里已经有一个类似的答案,但它与记忆有关。内存不是我的瓶颈。
解决方案
如果您考虑当前的起点和点在哪里,则可以将循环迭代次数减半。目前,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("")
如果合适,添加它。
推荐阅读
- sql-server - 在sql中求和运行总数
- git - 如何将两个 git 合二为一
- python - 用python从CSV文件制作直方图
- python - 使用 Tensorly 的非负张量分解示例
- php - 我正在尝试将多个复选框传递给 $_POST 页面并将数据保存到数据库
- python - 为什么追加到一个对象的列表属性,会修改同一类下所有对象的属性?
- r - 我可以通过列和行专门计算方差吗
- laravel - 从共享主机上的 storage_path 读取图像,例如 Godaddy,返回错误 404
- xcode - 在物理 ios 设备上启动 Flutter App 时出现错误代码
- objective-c - 如何将背景图像放入 NSSavePanel?