Я думаю, что это решение вашей проблемы.
def matchPattern(a: String, b: String): Boolean =
a
.split("\\s+")
.tails
.flatMap(_.inits)
.exists(_.mkString("") == b)
Это проверит любое слово или последовательность слов в a
, которое точно соответствует слову в b
. Он отклонит случаи, когда b
встроено в более длинное слово или последовательность слов.
Вызов split
превращает строку в список слов.
Вызов tails
возвращает все возможные конечные подпоследовательности списка, а inits
возвращает все ведущие подпоследовательности. Комбинация двух генерирует все возможные подпоследовательности исходного списка.
Вызов exist
объединяет слова и сравнивает их с тестовым словом.
Обратите внимание, что tails
и inits
являются ленивыми, поэтому они будут генерировать каждое решение для тестирования по очереди и останавливаются, как только решение будет найдено. Это отличается от решений, использующих sliding
, которые создают каждую возможную комбинацию перед проверкой любого из них.