Первое и последнее вхождения
Находим крайние вхождения f без циклов.
Как к ней подойти
Потренируйтесь находить нужные символы и фрагменты строки, не теряя границы срезов.
У строки есть индексы, срезы и методы поиска. Индексация начинается с нуля, правая граница среза не включается. Перед сборкой ответа проверьте, что произойдёт, если искомый фрагмент отсутствует.
Методы возвращают −1 при отсутствии; одинаковые найденные индексы означают одно вхождение.
Проверьте перед запуском
- При отсутствии f ничего не печатается, даже −1.
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: find и rfind
Методы возвращают −1 при отсутствии; одинаковые найденные индексы означают одно вхождение.
s = input()
first, last = s.find('f'), s.rfind('f')
if first != -1:
if first == last:
print(first)
else:
print(first, last)
Время: O(L). Память: O(L) для входной строки, O(1) дополнительно.
Другой способ: Подсчёт и поиск с обратной стороны
Индекс первого f в перевёрнутой строке переводим обратно формулой L−1−index. Явные циклы не нужны.
s = input()
count = s.count('f')
if count == 1:
print(s.index('f'))
elif count > 1:
print(s.index('f'), len(s) - 1 - s[::-1].index('f'))
Время: O(L). Память: O(L), включая перевёрнутую копию.