假设我有一组字符串S和一个查询字符串q。我想知道S中的任何一个成员是否是q的子字符串。(对于这个问题,子字符串包括相等的情况,例如"foo"是"foo"的子字符串。) 例如,假设执行我想要的操作的函数称为anySubstring
:
S = ["foo", "baz"]
q = "foobar"
assert anySubstring(S, q) # "foo" is a substring of "foobar"
S = ["waldo", "baz"]
assert not anySubstring(S, q)
有没有一种易于实现的算法,可以在时间复杂度为子线性 len(S)
的情况下完成这个任务?如果需要,将 S 处理成某些巧妙的数据结构也可以,因为我将使用大量 q 字符串查询每个 S,因此此预处理的均摊成本可能是合理的。
编辑:澄清一下,我不关心 S 的哪个成员是 q 的子字符串,只关心是否至少有一个是。换句话说,我只关心布尔型答案。