Определние самой длинной последовательности чисел

Есть строка с рандомными числами. И нужно вычислить какая последовательность чисел наиболее часто встречается. И вывести это число и сколько раз подряд оно максимум встречается Например «555666633666» Ответ: 6 4

У меня где-то ошибка в коде, он работает неправильно

str1 = '222288885555555999'
d = {}
b = str1[::-1]
for i in range(len(b)):
    if b[i] != b[i + 1]:
        el = b[i]
        in1 = b.index(el)
        el1 = b[i + 1]
        in2 = b.index(el1)
        d[b[i]] = b.count(el, in1, in2)
        break


for i in range(len(str1)):
    if i == len(str1)-1:  # для IndexError
        break
    if str1[i] != str1[i+1]: # Если следующий элемент списка не равен предыдущему, считаем количество одинаковых элементов встретившихся в этом диапазоне и заносим в словарь
        el = str1[i]
        in1 = str1.index(el)
        el1 = str1[i+1]
        in2 = str1.index(el1)
        d[str1[i]] = str1.count(el,in1,in2)
    if str1[i] in d.keys(): #Если такой элемент уже есть в словаре, то проверяем больше ли новая последовательность чем предыдущая
        el2 = str1[i]
        in3 = str1.index(el2)
        el3 = str1[i+1]
        in4 = str1.index(el3)
        if d.get(str1[i]) < str1.count(el2, in3, in4):
            d[str1[i]] = str1.count(el2,in3,in4)


print(max(d, key=d.get), max(d.keys()))

Ответы (1 шт):

Автор решения: Andy Pavlov

Первая ошибка в print(max(d, key=d.get), max(d.keys())). Вы находите число с максимумом появлений, а потом выводите максимальный ключ. Должно быть print(max(d, key=d.get), max(d.values())). Отсюда неправильный вывод результата.

Второй момент по коду. Вы теряете подсчет числа, которое в конце. Сейчас это 9. if str1[i] != str1[i+1] его не обрабатывает, т.к вы ищите индекс следующего изменяющегося числа (сейчас в d = {'2': 4, '8': 4, '5': 7}). Нужно доработать обработку этого случая.

На вкус и цвет помидоры, конечно, разные, но на мой взгляд можно было в лоб посчитать вхождения без применения индексов строк:

str1 = '2222888855555559995'
nums = list(map(int, list(str1)))
counts = dict.fromkeys(nums, 0)
for ie, e in enumerate(nums):
    if not ie:
        num = e
        count = 0
    if e == num:
        count += 1
    else:
        num = e
        count = 1
    counts[e] = count if count > counts[e] else counts[e]

print(max(counts, key=counts.get), max(counts.values()))  

Вывод:

5 7
→ Ссылка