根据leetcode,“列表索引超出范围”。但适用于IDLE

时间:2019-04-02 15:15:13

标签: python list indexing

我正在研究一个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 :(得分:0)

我认为错误不在您认为的位置。仅当列表lmax = ls[len(ls)-1]为空时,代码行ls才会失败。旁注:要获取列表中的最后一个元素,请使用负索引,该索引从末尾开始倒数:lmax = ls[-1]

因此,我将再次检查ls是否包含字符串。也许在切换IDE时,无法正确传递参数x