Можно ли вернуть любой символ при одинаковом количестве подряд идущих символов?
Что проверяют
Обычно это не вопрос интервьюера, а уточнение, которое задаёт сам кандидат в задаче вроде «найдите символ с самой длинной серией подряд идущих повторов». Интервьюер смотрит, замечаете ли вы неоднозначность до написания кода. Следом просят показать, как решение меняется при другом правиле выбора.
Как отвечать
Спрашивайте с вариантами, а не абстрактно: «У aabb две серии длины 2. Вернуть любую, первую по порядку или наименьшую по алфавиту?». Если ответ «любую», всё равно зафиксируйте детерминированное правило, чтобы тесты были стабильными.
Каркас решения за один проход, O(n) по времени и O(1) по памяти:
- состояние: текущий символ, длина текущей серии, лучший символ и лучшая длина;
- переход: символ совпал с предыдущим, увеличиваем счётчик, иначе сравниваем серию с лучшей и начинаем новую;
- правило ничьей: строгое
>оставит первую серию, нестрогое>=последнюю. Разница в один символ кода, и её стоит проговорить вслух; - завершение: после цикла сравнить последнюю серию, иначе
aabbbвернётa.
На Python коротко через itertools.groupby: max(((k, len(list(g))) for k, g in groupby(s)), key=lambda p: p[1]). При равенстве max возвращает первый максимальный элемент, то есть это правило «первая серия». Для data-роли могут попросить то же на pandas: номер серии получают через (s != s.shift()).cumsum(), дальше groupby.
Крайние случаи: пустая строка (вернуть None или бросить исключение), один символ, строка из одного повторяющегося символа, регистр (A и a разные?), символы вне ASCII.
Где спотыкаются
Не задают уточнение и пишут код молча. Потом выясняется, что нужен первый символ, а решение с >= возвращает последний.
Путают серии с общей частотой и берут Counter.most_common. У abab частота a равна 2, а самая длинная серия 1.
Забывают обработать последнюю серию после цикла и пустой ввод, из-за чего обращение s[0] падает с IndexError.