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

Замена внутри фрагмента

Меняем h только между первым и последним вхождениями.

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

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

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

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

Ключевая идея · Срез и replace

Граничные h сохраняются в неизменных срезах.

Проверьте перед запуском

  • Если 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).