Почему в список попадает посторонний элемент?

Я решал задачу, текст которой выглядит так:

введите сюда описание изображения

Написал такой код:

from collections import Counter

with open('text.txt', 'r') as f:
    s = f.readline()

row_max = []
l_max = 0

def pie(start):
    row = [s[start]]
    for j in range(start+1, len(s)):
        if row[-1] <= s[j]:
            row.append(s[j])
            if len(Counter(row)) > 3:
                return
            elif len(Counter(row)) == 3:
                global l_max
                global row_max
                if len(row) > l_max:
                    l_max = len(row)
                    row_max = row
                    print(row_max)
        else:
            return

for i in range(1, len(s)):
    pie(i)

print('-----')
print(row_max)

text.txt:

AABBAABBCCDDDEFFGF

В решении использовал глобальные переменные. Я знаю, что это плохо. Но эта задача из ЕГЭ, и если я буду делать акцент на правильности кода, то на экзамене мне просто не хватит времени.

Вывод в консоль:

['A', 'A', 'B', 'B', 'C']

['A', 'A', 'B', 'B', 'C', 'C']

['B', 'B', 'C', 'C', 'D', 'D', 'D'] 

-----

['B', 'B', 'C', 'C', 'D', 'D', 'D', 'E']

Проблема в том, что все изменения переменной row_max представлены в первых трех строчках вывода, поэтому конечная длина этого списка должна быть равна 7. Но в самом конце программы значение row_max почему-то изменяется - в список добавляется строка 'Е'. Я не могу понять причину этого изменения. Допускаю, что делаю очень глупую ошибку. Пожалуйста, подскажите, что я делаю неправильно?


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

Автор решения: deethereal

Он идет в след за последней "D":

for j in range(start+1, len(s)):
    if row[-1] <= s[j]:
        row.append(s[j])
.
.
.

   row_max = row
→ Ссылка