如何消除错误“列表索引超出范围”

时间:2019-10-19 01:04:12

标签: python

我正在解决以下问题:

  

编写一个函数以在字符串数组中找到最长的公共前缀字符串。

     

如果没有公共前缀,则返回一个空字符串“”。

示例1:

  

输入:[“花”,“流”,“飞行”]
  输出:“ fl”
  示例2:

     

输入:[“ dog”,“ racecar”,“ car”]
  输出:“”
  说明:输入字符串之间没有公共前缀。

但是结果表明,在第6行(代码a1= strs[0])上出现错误“列表索引超出范围”,这是我的代码:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        a1= strs[0] 
        a2=strs[1]
        if a1[0]!= a2[0]:
            return ""
        elif len(strs)==2:
            new=strs[0]
            new_x=strs[1]
            xmin=min(len(strs[0]),len(strs[1]))
            for i in range(xmin):
                i=0
                if new[i]==new_x[i]:
                    i+=1
                else:
                    res=i
                    rescom=new[:res]
                    return rescom
        else:
                    j=1
                    while j<len(strs):
                        strs_new=strs[j]
                        strs_cmp=strs[j-1]
                        for k in range(0,(min(len(strs_new)-1,len(strs_cmp)-1))):
                            if strs_new[k]==strs_cmp[k]:
                                k+=1  
                            else:
                                res=k
                        j+=1
                    return strs_new[:res]

1 个答案:

答案 0 :(得分:0)

我无法使用粘贴的代码复制您的错误。但是,我认为您真正想要获得的是这样的:

def longestCommonPrefix(strs):
    if not strs: return ""
    smallest = min([len(x) for x in strs])
    prefix = ""
    for i in range(smallest):
        a = strs[0][i]
        if all([x[i] == a for x in strs]):
            prefix += a
        else: break
    return prefix

编辑:再次查看代码后,您将无法处理strs = [""]或任何其他类似的单项列表的情况,因为在检查代码之前先调用a2=strs[1] strs的长度至少为2