Мини-урок · перед практикой
Обращение фрагмента
Сохраняем края и разворачиваем только внутреннюю часть.
Как к ней подойти
Потренируйтесь находить нужные символы и фрагменты строки, не теряя границы срезов.
Коротко о теме
У строки есть индексы, срезы и методы поиска. Индексация начинается с нуля, правая граница среза не включается. Перед сборкой ответа проверьте, что произойдёт, если искомый фрагмент отсутствует.
Ключевая идея · Обратный срез
Границы h остаются на месте; срез с шагом −1 разворачивает середину.
Проверьте перед запуском
- Первое и последнее h — границы всего фрагмента, а не соседняя пара h.
После практики
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Обратный срез
Границы h остаются на месте; срез с шагом −1 разворачивает середину.
s = input()
left, right = s.find("h"), s.rfind("h")
print(s[:left + 1] + s[left + 1:right][::-1] + s[right:])
Время: O(n). Память: O(n).
Другой способ: Обмены двух указателей
Переводим строку в изменяемый список и меняем симметричные символы местами.
s = list(input())
left = s.index("h") + 1
right = len(s) - 2 - s[::-1].index("h")
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
print("".join(s))
Время: O(n). Память: O(n).