Собесов

Python — длина самой длинной серии одинаковых символов

PythonСтроки и итерацияЛёгкаяJunior

Условие

Дана строка. Найдите длину самой длинной серии подряд идущих одинаковых символов.

Пример.

s = "fffggggrrrrrrrrrtttfffff"  →  9   (девять подряд 'r')

Решение

Однопроходный счётчик

Идём по строке, ведём текущую длину серии и максимум.

def longest_run(s: str) -> int:
    if not s:
        return 0
    best = cur = 1
    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            cur += 1
            if cur > best:
                best = cur
        else:
            cur = 1
    return best

O(n) времени, O(1) памяти.

Через itertools.groupby

from itertools import groupby
def longest_run(s):
    return max((sum(1 for _ in g) for _, g in groupby(s)), default=0)

Чистая «функциональная» версия. O(n) времени, O(1) дополнительной (после исчерпания итератора).

Подводные камни

  1. Пустая строка. Не забыть вернуть 0 (в варианте без groupby).
  2. Юникод. Работает корректно: Python сравнивает кодпойнты.
  3. Регистрозависимость. Условие — символ; обычно регистр учитывается. Если нет — приведите s.lower() сначала.
  4. Использовать re. max(len(m.group()) for m in re.finditer(r'(.)\1*', s)) — экзотично, но работает.

Эталонный ответ

from itertools import groupby
def longest_run(s):
    return max((sum(1 for _ in g) for _, g in groupby(s)), default=0)

O(n) времени.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти