LeetCode提交最长公共前缀Python代码提示列表索引越界是什么原因
索引越界问题原因
你提交的代码触发IndexError: list index out of range的核心原因是写死了访问输入数组的固定下标元素,没有适配所有合法输入场景,具体问题如下:
- LeetCode的测试用例覆盖了不同长度的输入数组
strs:当数组长度小于2时,执行secondWord = list(strs[1])会直接触发越界;如果输入是空数组,连firstWord = list(strs[0])都会报错。你本地测试的用例刚好是长度为3的数组,所以没有触发问题。 - 就算输入数组长度大于等于3,代码依然存在越界风险:循环过程中你直接用
secondWord[i]、thirdWord[i]取对应位置的字符,如果第二个或第三个字符串的长度小于当前遍历的下标i,同样会触发越界。比如输入strs = ["apple", "app", "ap"],当i=3时,第二个字符串只有3个字符,最大有效下标为2,访问下标3就会报错。
适配优化方向
如果要兼容所有合法输入,需要先处理边界场景,再做公共前缀判断:
- 优先判断如果输入数组为空,直接返回空字符串
- 如果输入数组长度为1,直接返回唯一的字符串元素
- 遍历字符时不要绑定固定的前三个字符串,要同时校验所有字符串对应位置的字符是否一致
你提到的zip方案确实更简洁,Python中zip(*strs)可以把所有字符串的同位置字符打包成元组,只要判断元组内的所有元素是否相同,就能逐步得到最长公共前缀。
内容的提问来源于stack exchange,提问作者Pinoyburn
相关产品推荐
相关产品推荐

