我正在解决以下问题:
编写一个函数以在字符串数组中找到最长的公共前缀字符串。
如果没有公共前缀,则返回一个空字符串“”。
示例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]
答案 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
。