Рабин-Карп подходит для поиска по нескольким подстрокам, но я думаю, что ваши фразы должны быть одинаковой длины.
Если они имеют одинаковую длину, вы можете найти подфразы длины ( минимальная длина по всем фразам ), а затем расширить, когда найдете что-то.
И еще одна мысль, которая у меня возникла, заключается в том, что вы можете расширить это, чтобы использовать небольшой набор, скажем, q длин фраз, в зависимости от ваших поисковых фраз. И вы можете изменить Рабина-Карпа так, чтобы q катящихся хешей вместо одного, с q наборами хешей. Это поможет, если вы сможете разбить свои фразы на подмножества q , которые имеют одинаковую длину.