Возможно ли в Python 3 обновить значение итерационной переменной во время выполнения? - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь написать программу, которая возвращает длину самой длинной подстроки в строке. Это мой код:

def lengthOfLongestSubstring():
dict = {}
s = 'dvdf'
max_substr_length = 0
max_substr = ''
if len(s) < 1:
    return 0
else:
    for letter in s:
        print('String value: ', s)
        if letter not in max_substr:
            max_substr = max_substr + letter
            max_substr_length = len(max_substr)
            dict[max_substr] = dict.get(max_substr, max_substr_length)
            print(letter, max_substr, max_substr_length, dict)
        elif letter in max_substr:
            dict[max_substr] = dict.get(max_substr, max_substr_length)
            s = s[s.index(letter)+1:]
            max_substr = ''
            max_substr_length = 0
            print(s, letter, max_substr, max_substr_length, dict)
    print(dict)
    print(max(dict.values(), default=0))

Для входной строки s = 'dvdf' Я избавляюсь от первого экземпляра буквы, которая повторяется во входной строке s, в строке 18 моего кода s = s[s.index(letter)+1:] , Поэтому, когда встречается второе 'd', s должно обновляться до s = 'vdf' К сожалению, for l oop не начинает итерацию с 0-го индекса этого нового s. Есть ли способ, который не включает в себя итерацию по целочисленным индексам, чтобы получить для l oop начало итерации с самого начала, когда строка обновляется?

1 Ответ

0 голосов
/ 05 марта 2020

Ну, нет, не так. Python повторяет все, что было s в начале l oop.

Вам следует попробовать другой подход, например использовать хранилище в подвале.

Push every letter to it in the correct order,

   loop untils its empty,

   pop a value,

   do whatever you want with it,

   push a value to it, if necessary.

в конце концов вы должен иметь рабочий пример.

...