«Список индексов вне диапазона» в соответствии с leetcode. Но работает в IDLE - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над проблемой кода leetcode, которая просит меня найти самый длинный общий префикс, те же буквы, среди некоторых строк. Язык Python3. Проблема заключается в следующем. (https://leetcode.com/problems/longest-common-prefix/)

Напишите функцию, чтобы найти самую длинную строку общего префикса среди массив строк.

Если общего префикса нет, вернуть пустую строку "".

  • Пример 1:

    Ввод: ["flower","flow","flight"]

    Выход: "fl"

  • Пример 2:

    Ввод: ["dog","racecar","car"]

    Вывод: ""

    Объяснение: У всех входных строк нет общего префикса.

Я попытался получить самую длинную строку, так как она должна содержать все общие буквы. Для этого я пытаюсь получить список длины строк и получить самую длинную длину. Тогда я могу использовать самую длинную длину, чтобы получить самую длинную строку. Но возникает ошибка «индекс списка вне диапазона», когда я отправляю свой код в leetcode.

ls.sort()
lmax = ls[len(ls)-1]

Я не вижу здесь проблемы с диапазоном индекса списка, так как я использовал этот метод раньше. Кроме того, я скопировал код в IDLE, и он не сообщил об ошибке.

Код ниже - это только первая часть моего кода. Остальные просто проверяют одинаковые буквы.

Буду очень признателен, если кто-нибудь сможет мне помочь с этой проблемой. Спасибо.

class Solution:
    def longestCommonPrefix(self, x):

        list1 = []
        for element in x: #convert strings into lists to search for common letters
            list1.append(list(element))

        i = 0 #for searching longest string
        m = 0 #for indicating letters in the longest string
        n = 0 #for indicating other strings
        p = 0 #for indicating letters in other strings

        ls = [] #search for the longest string
        for strs in list1:
            ls.append(len(strs))



        ls.sort()
        lmax = ls[len(ls)-1] ###This is the step that the bug occurs.##



        while i <= len(list1)-1: # To get the longest string.
            if len(list1[i]) == lmax:
                break
            else:
                i += 1
        longestStr = list1[i]

1 Ответ

0 голосов
/ 02 апреля 2019

Я не думаю, что ошибка - это то, где вы думаете. Строка с кодом lmax = ls[len(ls)-1] потерпит неудачу, только если список ls пуст. Примечание: чтобы получить последний элемент в списке, используйте отрицательный индекс, который начинается с конца и имеет обратный отсчет: lmax = ls[-1]

Так что я бы дважды проверил, что ls содержит строки. Возможно, при переключении IDE параметр x не передается правильно.

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