как yatu, моим первым решением такой проблемы было бы регулярное выражение. Однако я предложил решение, основанное на вашем подходе. проблема в вашем коде в том, что вы увеличиваете i только тогда, когда символ является альфа. Таким образом, для строки abc123
вы увеличите i в 3 раза. но так как следующий символ не является альфа, вы не incerase я. это означает, что теперь я застрял со значением 3, а это меньше, чем длина строки 6. Таким образом, ваша функция застряла в бесконечном цикле, так как вы перестаете увеличивать i.
Упрощенная версия вашего кода можетбыть написано как ниже. по существу, нет необходимости во втором цикле while. В действительности, цикл while вообще не нужен, вы можете просто использовать цикл for для перебора каждого символа в строке
def longestSubstring(string):
longest_letterSeq = ''
curr_letterSeq = ''
for char in string:
if char.isalpha():
curr_letterSeq += char
else:
if len(curr_letterSeq) > len(longest_letterSeq):
longest_letterSeq = curr_letterSeq
curr_letterSeq = ''
return longest_letterSeq
my_strings = ['ab24[AaBbCDExy0longest]', 'a a a1234b|c|d ', '12345']
for string in my_strings:
longest = longestSubstring(string)
print(f'the longest string in "{string}" is "{longest}"')
OUTPUT
the longest string in "ab24[AaBbCDExy0longest]" is "AaBbCDExy"
the longest string in "a a a1234b|c|d " is "a"
the longest string in "12345" is ""