Цель кода - найти самую длинную алфавитную подстроку в строке.
s = 'xyzbcdezzz'
longest_string = ''
current_string = ''
stringcount = 0
for n in range (len(s) - 1):
if s[n] <= s[n+1]:
current_string += (s[n]+s[n+1])
stringcount += 1
print('current string:', stringcount, current_string)
elif s[n] > s[n+1]:
if len(current_string) > len(longest_string) :
longest_string = current_string
current_string = ''
stringcount = 0
print('the longest string checked is:', longest_string, ', count reset')
if len(current_string) == len(longest_string):
print (current_string, longest_string)
if len(current_string) > len(longest_string):
print (current_string)
if len(longest_string) > len(current_string):
print(longest_string)
Когда я запускаю этот код, он дает "abbccd" как самую длинную подстроку, когда она фактически "abcd". Это происходит потому, что он проверяет символ a, сравнивая его со следующим в последовательности, а затем добавляет a в b, давая "ab". Затем он проверяет b, сравнивая с c и добавляет bc вместе, а затем добавляет "bc" в "ab".
Чтобы исправить это, я пытался заставить цикл пропустить следующий символ, если он уже в алфавитном порядке, и проверить следующий, увеличив значение "n" после выполнения условия, но это не означает, похоже, ничего не делает.
Приветствуются советы, советы, исправления и суровая критика.
EDIT: Кажется, я ввел некоторых из вас в заблуждение, поэтому извиняюсь. Я имел в виду, что если у меня есть строка, она извлекает самую длинную подстроку в алфавитном порядке. В случае xyzbcdezzz он будет извлекать "bcdezzz", потому что это самая длинная по алфавиту последовательность подстановок, а не bcde. Проблема с моим текущим кодом заключается в том, что он дает bccddeezzzzz. Если бы я мог пропустить один цикл, когда условие first if равно true, то я думаю, что это может работать в моем коде.