Замените () на o и (al) на al, оставив G неизменным. Такой вариант также сохранит уже готовую строку Goal из первого примера.
Разбор команд для Goal Parser
Замените () на o и (al) на al, оставив G неизменным. Такой вариант также сохранит уже готовую строку Goal из первого примера.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана строка cmd, содержащая последовательность команд для программы Goal Parser. Команды могут быть только следующих видов: "G", "()" и "(al)". Их смысл следующий:
- "G" → "G"
- "()" → "o"
- "(al)" → "al" Необходимо пройти по строке cmd, заменить каждый найденный шаблон согласно правилам и собрать получившуюся строку.
Пример 1: Ввод: cmd = "Goal" Вывод: "Goal" Пояснение:
- "G" → "G"
- остальные символы "o", "a", "l" уже находятся в нужном виде и не требуют замены.
- Итоговое слово остаётся "Goal".
Пример 2: Ввод: cmd = "G()(al)" Вывод: "Goal" Пояснение:
- "G" → "G"
- "()" → "o"
- "(al)" → "al"
- Сцепив части получаем "G" + "o" + "al" = "Goal".
Пример 3: Ввод: cmd = "G()()()()(al)" Вывод: "Gooooal" Пояснение:
- "G" → "G"
- каждая последовательность "()" преобразуется в "o" (четыре раза → "oooo")
- "(al)" → "al"
- Итог: "G" + "oooo" + "al" = "Gooooal".
Ответ
Замените () на o и (al) на al, оставив G неизменным. Такой вариант также сохранит уже готовую строку Goal из первого примера.
def interpret(cmd):
return cmd.replace('()', 'o').replace('(al)', 'al')
assert interpret('G()(al)') == 'Goal'
assert interpret('G()()()()(al)') == 'Gooooal'
assert interpret('Goal') == 'Goal'
Два шаблона не перекрываются и не создают друг друга после замены, поэтому порядок этих замен не меняет результат. Время и память — O(n).
Есть неточность условия: строка Goal не состоит только из перечисленных исходных токенов. Показанное решение допускает уже интерпретированные символы, как требуют примеры. Если нужна строгая проверка грамматики, следует сканировать токены и отклонять неизвестные фрагменты.