Определние самой длинной последовательности чисел
Есть строка с рандомными числами. И нужно вычислить какая последовательность чисел наиболее часто встречается. И вывести это число и сколько раз подряд оно максимум встречается Например «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 шт):
Первая ошибка в 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