Первое и последнее вхождения
Вы решили задачу. Теперь можно сравнить подходы.
Находим крайние вхождения f без циклов.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: 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), включая перевёрнутую копию.
На что обратить внимание
- При отсутствии f ничего не печатается, даже −1.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.