Мини-урок · перед практикой
Замена внутри фрагмента
Меняем 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).