string - 从子字符串列表中获取字符串

标签 string algorithm substring string-matching

我要求在编程竞赛(facebook 招聘)中解决以下问题

输入:子字符串列表:

{"bar","foo","hi"} //from 1 to 100 sub-strings 

和句子:

"hellothisisfoobarhi" //from 1 to 1000000 character

输出:12//句子中第一个匹配的索引(foo)

另一个例子是:

子字符串:{"hi","hi"}

句子:“hiJonIamSayinghihiforYou”

output:15//hi的索引,第二个'hi'因为第一个'hi'只是一个技巧,子句是'hi' hi"

还有一个例子:

子字符串:{"hi","foo"}

句子:“sayingfoohi”

output:6//顺序无关紧要,它们只需要彼此相邻

谁知道解决这个问题的好算法?

最佳答案

构建大字符串的后缀树——树的构建复杂度为 O(n),其中 n 是大字符串的长度。

现在您可以在 O(m) 时间内找到任何子串的位置(其中 m 是子串的长度),只需沿着子串向下穿过树——子串结束的节点或叶子将索引对应的键保存到大字符串中。

遍历子字符串集,找到它们在大字符串中的位置,跟踪最小索引。

关于string - 从子字符串列表中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367181/

相关文章:

mysql - Laravel 5 - 检索 blob 文件返回 TRUE 或 1

c - 获取 char* 的子串

java - 在特殊字符之间查找文本并替换字符串

javascript - 如何使用 javascript 正则表达式替换为单词的子字符串

c - 打印文件每行的 m 到 n 列

java - 如何判断2个不同的单词是否具有相同的字母?

检查有效组合的算法

algorithm - 是否有针对此类问题的特定算法?

java - 如何进行这种类型的算法 - 根据预算获取产品列表

regex - 仅从大型字符串列表中的一部分字符串中检测和删除逗号 (R)