Напиши функцию, которая возвращает символ с максимальным количеством подряд идущих повторений в строке
Что проверяют
Умение пройти строку один раз и правильно закрыть последнюю серию. Классическая ловушка на границе: решение, которое обновляет максимум только в момент смены символа, теряет ответ, если самая длинная серия стоит в конце строки.
Как отвечать
Один проход, два счётчика и явная договорённость про пустой вход и про ничью.
from itertools import groupby
def longest_run(s: str) -> str:
best_char, best_len = "", 0
for ch, group in groupby(s):
length = sum(1 for _ in group)
if length > best_len:
best_char, best_len = ch, length
return best_charСкажите вслух два решения, которые вы приняли: для пустой строки возвращается пустая строка, при равных сериях побеждает первая, потому что сравнение строгое. Оба поведения стоит подтвердить у интервьюера, это и есть та работа с требованиями, которую он оценивает. Ручной вариант со счётчиками не хуже, главное не забыть сравнение после цикла. Сложность линейная, дополнительной памяти константа, groupby ленив и копию строки не создаёт.
Где спотыкаются
Теряют хвост. Если максимум обновляется только в ветке смены символа, то для aabbb ответом будет a. Тест со строкой, где длиннейшая серия последняя, интервьюер даёт первым.
Второе: считают частоту, а не серию. Вызов Counter(s).most_common(1) отвечает на другой вопрос: для abab он вернёт a с двумя вхождениями, хотя подряд ни один символ не повторяется ни разу.
Третье: обновляют символ, но не длину. Строка best_char = ch без best_len = length в финальной проверке текущий тест не ломает, но следующей же правкой превращается в тихий баг, и на код-ревью это замечают.