【发布时间】:2020-08-20 14:17:50
【问题描述】:
有两个字符串集(c++)
set<string> set1, set2;
我需要迭代 set1 来检查 set1 中的任何字符串是否是 set2 中字符串的子字符串。
下面的代码是我的解决方案,有什么快速算法吗?
for(auto& str1 : set1) {
for(auto& str2: set2) {
if (strstr(str2.data(), str1.data()))
// do something
}
}
有一些限制
- 该函数用于在线 RPC 服务器
- set2 和 set1 的候选对象可能太大而无法完全加载到内存中,因此我无法构建一些索引,例如 trie 或缓存结果。
【问题讨论】:
-
strstr(str2.data(), str1.data())真的吗? -
字符串需要多长时间?很长还是几个字节?如果
str2.data()s 很长,str1.data()很短,你可以boyer-moore。 -
您是否考虑过使用像Aho-Corasick 或Commentz-Walter 这样可以并行搜索多个模式的东西?