Не получается посчитать максимальную, подряд идущую последовательность символов 'ABA'

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

Допустим, есть последовательность символов 'ABAABABBBBBBBB' Моя задача, найти максимальное количество подряд идущих последовательностей 'ABA' В данном случае, ответ будет m = 2. Первые 6 символов. У меня прога печатает m=1. Почему-то каждый раз обнуляя переменную k. Не могу понять почему.

s = 'ABAABAABABBBB'
print (s)
k=0
m = 0
for i in range(2,len(s)):
    if s[i-2] == 'A' and s[i-1]=='B' and s[i]=='A':
        k=k+1
        m = max(k,m)
        i += 2
    else:
        k=0
print(m)

Ответы

▲ 1Принят

Пример не очень корректный. Все же по нему получается 3 подстроки подряд. Плюс с константами немного подошиблись и с логикой. Ну и как было правильно замеченно, тут цикл for не подходит. Нужен while

Получилось как-то так

s = 'ABAABABBABABBBB'
print (s)
m = 0
k = 0
i = 2
while i < len(s):
    if s[i-2] == 'A' and s[i-1]=='B' and s[i]=='A':
        k += 1
        i += 3
    else:
        i += 1
        m = max(k, m)
        k = 0
   
print(m)

Т.е. логика примерно следующая: если условие соблюдается, то увеличиваем счетчик количества подстрок k в текущей последовательности.

Как только условие не сработало, то сравниваем число подсток в последовательности, с тем что уже было. Это функция max и переменная m. А счетик подстрок k обнуляем.

Ну и если условие выполняется, то переходим на три символа вперед. А если нет - то только на один