Ctrl K

Все пересказы фразы

Средняя
Редактор хочет увидеть все способы переписать фразу с помощью словаря синонимов. Дан список pairs, где каждая пара [x, y] означает, что слова x и y взаимозаменяемы. Синонимия транзитивна: если x заменяет y, а y заменяет z, то x заменяет и z. Дана фраза sentence — слова, разделённые одиночными пробелами. Каждое слово фразы, у которого есть синонимы, можно заменить на любое слово из его группы (или оставить как есть); остальные слова не меняются. Верните все различные фразы, которые так получаются, отсортированные лексикографически (как строки).
Пример 1
pairs=[["quick", "fast"], ["fast", "rapid"]], sentence="a quick fix" → ['a fast fix', 'a quick fix', 'a rapid fix']

quick, fast и rapid — одна группа синонимов, поэтому получаются три фразы, упорядоченные по алфавиту.

Пример 2
pairs=[["big", "huge"], ["old", "ancient"]], sentence="big old house" → ['big ancient house', 'big old house', 'huge ancient house', 'huge old house']

Две независимые замены дают 2 × 2 = 4 варианта.

Пример 3
pairs=[], sentence="nothing to swap" → ['nothing to swap']
Ограничения
  • 0 ≤ len(pairs) ≤ 10
  • len(pairs[i]) == 2, слова в паре различны
  • 1 ≤ длина слова в паре ≤ 20
  • Пары не повторяются
  • В sentence от 1 до 20 слов, разделённых одиночными пробелами
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСклеить карточки контактов СредняяЦепочки синонимов СредняяПерестановки по связям СредняяСвободный двоичный код СредняяВсе способы расставить пробелы Сложная
загружаем Python…
Вход
pairs=[["quick", "fast"], ["fast", "rapid"]], sentence="a quick fix"
Ожидается
['a fast fix', 'a quick fix', 'a rapid fix']

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 126 тестов на сервере, включая скрытые.