【发布时间】:2020-05-14 22:33:23
【问题描述】:
这段代码(改编自前缀-后缀代码)对于较大的语料库来说非常慢:
s1 = 'gafdggeg' s2 = 'adagafrd'输出:gaf
def pref_also_substr(s):
n = len(s)
for res in range(n, 0, -1):
prefix = s[0: res]
if (prefix in s1):
return res
# if no prefix and string2 match occurs
return 0
任何有效的替代方案?
【问题讨论】:
-
如果问题的主要大小是
s2的长度,而s1相对较小,您可以使用正则表达式搜索有效地解决此问题,方法是从s1构建一个正则表达式,例如它将匹配s1的任何前缀。如果你有兴趣,我可以告诉你如何做到这一点。但是,如果s1的长度仅受O(len(s2))的约束,那么这种方法不是最优的,您将需要手动编码。无论如何,问题可以在线性时间内解决(在len(S2)),这比您当前的解决方案要好得多。 -
这看起来像是Longest common substring problem 的更简单(或受限)版本,为此存在有效的基于后缀树的解决方案。
-
子串的最小长度是多少?
标签: python substring longest-prefix