Нахождение разницы в массиве - PullRequest
2 голосов
/ 02 апреля 2020

Вот ссылка на оригинальный вопрос: https://leetcode.com/problems/find-the-difference/

Вот мой код. Я продолжаю получать ошибку «индекс вне диапазона», но я не уверен, почему.

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        i = 0 
        ss = list(s)
        tt = list(t)
        while ss[i] == tt[i]: 
            i += 1 
            if ss[i] != tt[i]:
                return tt[i]

Ответы [ 4 ]

1 голос
/ 02 апреля 2020

Возможно, ваши параметры имеют другой размер.

Например, t - abcd, а s - aa. Вот почему у вас возникла эта проблема.

Предположим, что i равно 2

ss будет c, а tt выдаст index out of range

ss[i] == tt[i]

1 голос
/ 02 апреля 2020

Допустим, вы задаете эти 2 в качестве входных данных

s = "abcd"
t = "abcde"

на 4-м круге вашего l oop i = 3, и оно станет 4, поскольку ss[i] != tt[i] ложно, оно будет go на на следующем круге и оценит это выражение ss[i] == tt[i], длина ss равна 4, и он попытается получить доступ к 5-му элементу, который не существует, и в конечном итоге выдаст ошибку indexError, которую вы можете попробовать что-то вроде:

class Solution:
def findTheDifference(self, s: str, t: str) -> str:
    i = 0 
    ss = list(s)+[None]
    tt = list(t)
    while ss[i] == tt[i]: 
        i += 1 
        if ss[i] != tt[i]:
            return tt[i]
1 голос
/ 02 апреля 2020

Ваша проблема в том, что вы не прекращаете итерацию, когда добираетесь до конца списка. Если вы измените свое условие while на:

while ss[i] == tt[i] and i < len(ss) and i < len(tt)

, вы избежите IndexError.

. Отдельно эта ситуация гораздо лучше подходит для for l oop:

for i in range(min(len(ss), len(tt))):  # Only loop while both lists still have elements
    ...
1 голос
/ 02 апреля 2020

В зависимости от вопроса строка t будет иметь длину на 1 больше, чем длина строки s . Теперь представьте, что происходит, когда, скажем, строка t формируется путем добавления случайного символа к концу строки s .

Когда вы закончите обработку всей строки s символов, вы продолжите проверять последний символ строки t , но символа с соответствующим индексом в строке s нет, и это приводит на Index Out Of Range

Есть лучший подход для решения этого вопроса, постарайтесь.

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