问题陈述:
给出两个字符串列表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)
时间
有没有办法让它更节省时间,甚至影响空间(使用任何数据结构)?
答案 0 :(得分:0)
就时间复杂度而言,这是最快的。
每个正则表达式都至少与每个字符串匹配一次。否则,您将无法获得&#34;匹配&#34;的信息。或&#34;不匹配&#34;。
就绝对时间而言,您可以使用filter
来避免缓慢的Python循环:
mapping = {regex: filter(re.compile(regex).match, A) for regex in B}