Этот вопрос проверяет умение комбинировать методы строк и работать со срезами.
Нужно найти индексы первого и последнего вхождения символа, а затем собрать новую строку через срезы. Если символ встречается один раз, заменяется только одно вхождение. Если символ не найден, строка возвращается без изменений. Такой подход не требует прохода по строке вручную.
Решение строится в три шага: найти позиции, обработать особые случаи, собрать новую строку.
Шаги:
найти первое вхождение (find)
найти последнее (rfind)
заменить символы через slicing
def replace_first_last(s, old, new):
first = s.find(old)
if first == -1:
return s
last = s.rfind(old)
if first == last:
return s[:first] + new + s[first+1:]
s = s[:first] + new + s[first+1:]
last = s.rfind(old)
return s[:last] + new + s[last+1:]
Важно учитывать:
символ отсутствует
символ встречается один раз
строка очень короткая
Если строка большая:
минимизировать копирования
не делать лишних проходов
Вывод
Решение обычно строится на find, rfind и срезах, что дает простой и читаемый код.