Ошибка индексации списка питонов в forloop с внутренним циклом while - PullRequest
0 голосов
/ 06 ноября 2019

Вот моя параллельная версия кода:

from collections import Counter
class Solution:
    def minWindow(self, s: str, t: str) -> str:

        left = 0
        right = float("inf")
        ref = Counter(t)
        necessary_count = sum(ref.values())
        curr_count = 0
        curr_dict = Counter()
        slow = 0
        for i in range(0,len(s)):
            c=s[i]
            if c in ref:
                curr_dict[c]+=1
                if curr_dict[c]<=ref[c]:
                    curr_count+=1
            while curr_count == necessary_count:
                if (i-slow)<(right-left):
                    left,right = slow,i
                s = s[slow]
                if s in ref:
                    curr_dict[s]-=1
                if curr_dict[s]<ref[s]:
                    curr_count-=1
                slow+=1
        if right == float("inf"): return ''
        return s[left:right+1]


пример теста:

Input: S = "ADOBECODEBANC", T = "ABC"
Expected Output: "BANC"
Actual Output:""

В настоящее время я получаю и индексирую ошибку, где я объявляю c=s[i]. Когда я проходил через отладчик, он выдает ошибку сразу после того, как я закончу программы, в первый раз встречающиеся с циклом while. Почему я нарушаю индекс s (0<=i<len(s)), и forloop остается в этих пределах? Это как-то связано с моим циклом while?

1 Ответ

1 голос
/ 06 ноября 2019

Он действительно имеет отношение к вашему циклу while:

s = s[slow]

При первом запуске этого кода slow равен 0, а s переназначается на первыйсимвол (и его длина теперь равна 1).

На следующей итерации цикла for c=s[i] поднимет IndexError, поскольку i равно 1, но len(s) равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...