Ctrl K

Сдвиги букв по расписанию

Средняя
Даны строки source и target из строчных латинских букв и число moves. Нужно превратить source в target не более чем за moves ходов. Ходы нумеруются с 1. На ходу номер i можно сделать одно из двух: - выбрать позицию в source, которую ещё ни разу не выбирали, и сдвинуть стоящую там букву вперёд по алфавиту ровно на i шагов (после z снова идёт a); - пропустить ход. Каждую позицию можно выбрать не больше одного раза. Верните True, если превратить source в target получится, иначе False. Строки могут быть разной длины — тогда это невозможно.
Пример 1
source="cat", target="dog", moves=20 → True

Сдвиги: c→d на 1, a→o на 14, t→g на 13 (t, u, …, z, a, …, g). Все сдвиги разные, самый большой — 14 ≤ 20, значит, на ходах 1, 13 и 14 всё успеваем.

Пример 2
source="aaa", target="bbb", moves=27 → False

Каждую букву нужно сдвинуть на 1. Первой подходит ход 1, второй — ход 27 (27 сдвигов = полный круг + 1), а третьей уже нужен ход 53 > 27.

Пример 3
source="go", target="go", moves=0 → True

Строки уже совпадают, ходы не нужны.

Ограничения
  • 1 ≤ len(source), len(target) ≤ 10⁵
  • 0 ≤ moves ≤ 10⁹
  • Строки состоят из строчных латинских букв
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый длинный фрагмент без повторов СредняяЧисло римскими цифрами СредняяСлова с кнопочного телефона СредняяРазложить анаграммы по группам СредняяРазбиение на слова из словаря Средняя
загружаем Python…
Вход
source="cat", target="dog", moves=20
Ожидается
True

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