Мини-урок · перед практикой

Обращение фрагмента

Сохраняем края и разворачиваем только внутреннюю часть.

Как к ней подойти

Потренируйтесь находить нужные символы и фрагменты строки, не теряя границы срезов.

Коротко о теме

У строки есть индексы, срезы и методы поиска. Индексация начинается с нуля, правая граница среза не включается. Перед сборкой ответа проверьте, что произойдёт, если искомый фрагмент отсутствует.

Ключевая идея · Обратный срез

Границы 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).