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

问题描述 投票:0回答:1

我正在研究以下问题:编写一个函数以在字符串数组中找到最长的公共前缀字符串。

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

示例1:

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

输入:[“狗”,“赛车”,“汽车”]输出:“”说明:输入字符串之间没有公共前缀。

但是结果显示内联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]


python
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.