Замена внутри фрагмента
Вы решили задачу. Теперь можно сравнить подходы.
Меняем h только между первым и последним вхождениями.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Срез и replace
Граничные h сохраняются в неизменных срезах.
s = input()
left, right = s.find("h"), s.rfind("h")
if left < right:
s = s[:left + 1] + s[left + 1:right].replace("h", "H") + s[right:]
print(s)
Время: O(n). Память: O(n).
Другой способ: Счётчик вхождений
Нумеруем вхождения и заменяем все, кроме первого и последнего.
s = input()
remaining = s.count("h")
seen = 0
result = []
for ch in s:
if ch == "h":
seen += 1
ch = "H" if 1 < seen < remaining else "h"
result.append(ch)
print("".join(result))
Время: O(n). Память: O(n).
На что обратить внимание
- Если h ровно две, строка остаётся прежней.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.