← Вернуться к карте тем
Alterna · глава 36 · страница 36.2

Поиск и подсчёт символов

Для одного прохода храни только необходимое состояние: счётчик, текущую длину серии и лучший результат.

Для одного прохода храни только необходимое состояние: счётчик, текущую длину серии и лучший результат.

суть и практика8 классЕГЭ №24
01

Как это устроено

Линейная обработка строки хранит небольшое состояние: текущую серию, счётчик вхождений, позицию или лучший найденный результат.

count. Количество событий, удовлетворивших условию.

current. Длина серии, которая заканчивается на текущем символе.

best. Лучший результат среди всех уже обработанных позиций.

Окно. Фрагмент s[i:i+k] проверяет соседние символы или подстроку.

02

Один пример в исполнении

Запусти короткую программу и переходи по строкам. Визуализатор показывает только код, текущую строку, переменные и вывод.

count считает непересекающиеся вхождения подстроки, а перекрывающиеся пары надо считать проходом по индексам. find возвращает индекс первого вхождения или -1; index похож, но при отсутствии вызывает ValueError. Для серии обновляй best сразу после увеличения current, иначе последняя серия может потеряться.

Карта алгоритмаЧитай слева направо, затем запускай код.
  1. 1Начало
  2. 2Взять следующий символ
  3. 3Символ A?
  4. 4Да: увеличить серию и best · Нет: сбросить
  5. 5Вывести best
03

Запомнить

Синтаксис этой страницы
for ch in s

Перебирает символы строки в порядке слева направо.

range(len(s) - 1)

Даёт допустимые старты всех пар соседних символов.

s.count(part)

Считает непересекающиеся вхождения part.

s.find(part)

Возвращает индекс первого part либо -1.

s.rfind(part)

Возвращает индекс последнего part либо -1.

s.index(part)

Как find, но при отсутствии part вызывает ValueError.

max(a, b)

Выбирает больший результат; удобно обновлять рекорд серии.

strip

Удаляет перевод строки и пробелы по краям входа.