Предположим, у меня есть набор строк 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)
IsЕсть ли простой в реализации алгоритм, чтобы сделать это с временной сложностью, сублинейной в len(S)
?Это нормально, если сначала нужно обработать S в какую-нибудь умную структуру данных, потому что я буду запрашивать каждый S с большим количеством строк q, поэтому амортизированная стоимость этой предварительной обработки может быть разумной.
РЕДАКТИРОВАТЬ: Чтобы уточнить,Мне все равно, , какой член S является подстрокой q, только ли хотя бы один.Другими словами, я только забочусь о логическом ответе.