Ctrl K

Сократить слова до корней

Средняя
Есть словарь корней roots и текст text — слова через одиночный пробел. Если слово текста начинается с какого-то корня из словаря, замените всё слово этим корнем. Если подходит сразу несколько корней, берите самый короткий. Слова, которые не начинаются ни с одного корня, оставьте без изменений. Верните получившийся текст, сохранив порядок слов и одиночные пробелы между ними.
Пример 1
roots=['sun', 'moon', 'star'], text='sunflowers bloom under starlight and moonbeams' → 'sun bloom under star and moon'

«sunflowers» начинается с корня sun, «starlight» — с star, «moonbeams» — с moon. Остальные слова ни с одного корня не начинаются и остаются как были.

Пример 2
roots=['pre', 'p', 'pref'], text='prefix press apple' → 'p p apple'

Слова «prefix» и «press» начинаются сразу с нескольких корней — берём самый короткий, p.

Пример 3
roots=['rain'], text='rain rainbow train' → 'rain rain train'

Корень должен стоять в самом начале слова: «train» содержит rain, но начинается не с него.

Ограничения
  • 1 ≤ len(roots) ≤ 10⁴
  • 1 ≤ len(roots[i]) ≤ 100
  • 1 ≤ len(text) ≤ 10⁶
  • В тексте от 1 до 10⁵ слов, длина каждого — от 1 до 1000
  • Слова разделены ровно одним пробелом, пробелов в начале и в конце нет
  • Корни и слова состоят только из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРазбиение на слова из словаря СредняяПодсветить найденное СредняяСамые частые запросы СредняяСлово, выращенное по букве СредняяПодсветка найденных слов Средняя
загружаем Python…
Вход
roots=['sun', 'moon', 'star'], text='sunflowers bloom under starlight and moonbeams'
Ожидается
'sun bloom under star and moon'

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