Не получается найти подстроку с наибольшим количеством подряд идущих символов

Рейтинг: 1Ответов: 2Опубликовано: 19.03.2023

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

m = s[0]
k = 0
mx = 0
o = ''
for i in range(len(s)):
    if s[i] == m:
        k += 1
        o = s[i]
    else:
        mx = max(k, mx)
        k = 0
    m = s[i]
print(o)
print(mx)

Ответы

▲ 1

Кажется достаточным начинать цикл с единицы (range(1, len(s)) и назначать k=1 в двух местах

s = 'aabbaaaabb'
#s = 'aaaaabbaaaabb'
#s = 'aabbaaaabbbbbb'
m = s[0]
k = 1
mx = 1
o = m
for i in range(1, len(s)):
    if s[i] == m:
        k += 1
        if k > mx:
            mx = k
            o = m
    else:
        k = 1
        m = s[i]
print(o)
print(mx)
▲ 0
def max_substring(s):
    max_count = count = 1
    max_char = s[0]
    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            count += 1
            if count > max_count:
                max_count = count
                max_char = s[i]
        else:
            count = 1
    return (max_char, max_count)

print(max_substring('aabbbccddddeeefffff'))
print(max_substring('aabbb'))
print(max_substring('aaaaaaaaabbb'))

Ответы

('f', 5) ('b', 3) ('a', 9)