Попытка создать алгоритм, который проверяет строку, а затем выводит самую длинную подстроку

единственная загвоздка в том, что это должно быть в алфавитном порядке: где значение Unicode больше, чем предыдущий символ. Если у меня есть строка с буквами «owdnloquxat», то будет напечатано только «loqux», так как это самая длинная подстрока в алфавитном порядке.

Я пробовал этот код. Однако в этом случае он печатает только «az», а должен печатать «beggh».

s = 'azcbobobegghakl'
sList = list(s)

sub = s[0]

long, lenght = sub, 1

for i in s[1:]:
    if ord(sub[-1]) <= ord(i):
        sub += i
    print(sub)

Я новичок в python, но мне нужно пройти этот курс. Если вы хотите дать ответы, это нормально. Подсказки тоже не помешали бы, так как я хочу научиться.


person Loudee    schedule 18.06.2019    source источник
comment
Вы должны дать лучший заголовок своему вопросу, например: найти самую длинную подстроку в алфавитном порядке. На аналогичный вопрос дается ответ здесь: stackoverflow.com/questions/19618533/   -  person m.rp    schedule 18.06.2019
comment
Вы проверяете только подстроку, начинающуюся с первой буквы, поэтому вы можете найти только az. Вы должны обернуть свой код внутри другого цикла for, который изменит начальную букву.   -  person Selcuk    schedule 18.06.2019


Ответы (1)


Вот один.

s = 'azcbobobegghakl'

c = s[0]
best = ""
for i in s[1:]:
    if i >= c[-1]:
        c += i
    else:
        if len(c) > len(best):
            best = c
        c = i

if len(c) > len(best):
    best = c


print(best)
person Christian Sloper    schedule 18.06.2019
comment
Я чувствую, что ваш подход должен быть правильным. Но нет необходимости явно строить строку c (делая алгоритм квадратичным) - просто запомните начальный индекс и сравните каждый символ с предыдущим. - person MBo; 18.06.2019
comment
вы правы, продолжайте забывать, что строки неизменяемы :-) - person Christian Sloper; 18.06.2019