给定一个字符串str
和一个可变长度前缀列表p
,我想找到str
开头找到的所有可能的前缀,允许最多{{1} k
中的不匹配和通配符(点字符)。
我只想在字符串的开头搜索,并且需要有效地为str
和数百万len(p) <= 1000; k <= 5
s执行此操作。
例如:
str
是否有一个有效的算法,理想情况下已经有python实现了?
我目前的想法是逐字逐句str = 'abc.efghijklmnop'
p = ['abc', 'xxx', 'xbc', 'abcxx', 'abcxxx']
k = 1
result = ['abc', 'xbc', 'abcxx'] #but not 'xxx', 'abcxxx'
,并保持每个前缀不匹配计数的运行记录。
在每一步,我都会计算一个新的候选人名单,这是没有太多不匹配的前缀列表。
如果我到达前缀的末尾,它会被添加到返回的列表中。
这样的事情:
str
但是我不确定这是否比仅仅搜索一个前缀更有效率,因为它需要在每一步重建这个候选列表。
答案 0 :(得分:0)
我不知道究竟是怎么回事。
但如果我要写它,我会尝试构建一个所有可能的决策点,带有你所卷入的所有状态的附加向量。然后你会拿走每个字符串,然后走到特里最终匹配的节点,然后返回预编译的结果向量。
如果你有很多前缀并且设置k
大,那么这个特里可能非常大。但如果你正在分摊创建它而不是在数百万字符串上运行它,那么它可能是值得的。