Обращение фрагмента
Вы решили задачу. Теперь можно сравнить подходы.
Сохраняем края и разворачиваем только внутреннюю часть.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Обратный срез
Границы 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).
На что обратить внимание
- Первое и последнее h — границы всего фрагмента, а не соседняя пара h.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.