字符串的高效算法 - 正则表达式匹配

时间:2017-06-24 14:23:19

标签: python regex string algorithm data-structures

问题陈述:

  

给出两个字符串列表A和正则表达式B(它们也是字符串)   对于列表B中的每个正则表达式,找到列表A中的所有匹配字符串   列表长度A< = 10 ^ 6(N)
  弦长B <= 100(M)
  弦长,正则表达式<= 30(K)
  假设正则表达式匹配和字符串比较需要O(K)时间,正则表达式可以包含任何python正则表达式支持的操作。

我的算法:

for regex in B:
    for s in A:
        if regex.match(s):
            mapping[regex].add(s)

这需要O(N*M*K)时间 有没有办法让它更节省时间,甚至影响空间(使用任何数据结构)?

1 个答案:

答案 0 :(得分:0)

就时间复杂度而言,这是最快的。

每个正则表达式至少与每个字符串匹配一次。否则,您将无法获得&#34;匹配&#34;的信息。或&#34;不匹配&#34;。

就绝对时间而言,您可以使用filter来避免缓慢的Python循环:

mapping = {regex: filter(re.compile(regex).match, A) for regex in B}