Вы можете проанализировать обе строки и разбить их на пустое пространство, чтобы получить массивы токенов A1 и A2. Затем просто проверьте каждую смежную подпоследовательность в A1 на предмет соответствия в A2. Для меня это выглядит как O (n ^ 4), что лучше, чем получать все одинарные совпадения и искать комбинации ... что не является полиномом.
1. the cat is on the roof
2. a man is on the stage
A1 = [the, cat, is, on, the, roof]
A2 = [a, man, is, on, the, stage]
[the]: no match
[cat]: no match
[is]: match
[is, on]: match
[is, on, the]: match
[is, on, the, roof]: no match
[on]: match
[on, the]: match
[on, the, roof]: no match
[the]: match
[the, roof]: no match
[roof]: no match
-end-
Рекурсия кажется элегантным способом реализации чего-то подобного. Если вам нужно что-то более эффективное, я уверен, что есть более разумный способ сделать это, чем этот.