请求修复Python最长公共前缀函数的索引越界问题
修复最长公共前缀代码的索引越界问题
你的代码核心思路没问题,但索引越界的原因是没有检查当前要访问的字符位置j是否超出了某个字符串的长度。比如输入["ab","a"]时,当j=1,第二个字符串"a"的长度只有1,没有索引为1的字符,直接访问就会报错。
基于你的现有代码,只需要在每次比较字符前,先判断所有字符串的长度是否都大于j;如果有字符串长度<=j,说明公共前缀已经到尽头,直接终止循环。修改后的代码如下:
strs = ["ab","a"] def longestCommonPrefix(strs): for word in strs: if word == "": return "" if len(strs) == 1: return strs[0] common_prefix = "" j = 0 Common = True while Common: # 新增检查:如果有字符串的长度小于等于j,说明已经到了该字符串的末尾,停止循环 for word in strs: if len(word) <= j: Common = False break if not Common: break # 原来的字符比较逻辑 for i in range(len(strs) - 1): if strs[i][j] != strs[i + 1][j]: Common = False break else: common_prefix += strs[0][j] j += 1 return common_prefix print(longestCommonPrefix(strs))
修改说明
- 在每次进入字符比较前,新增一个循环检查所有字符串的长度是否都大于当前的
j。如果有字符串长度<=j,说明这个字符串已经没有第j个字符了,公共前缀无法继续延长,直接停止循环。 - 这个修改完全基于你原有的代码逻辑,没有重写核心部分,只是补上了边界检查的环节。
测试输入["ab","a"]时,当j=1,检查到第二个字符串长度是1<=1,所以Common设为False,循环终止,返回已经积累的"a",符合预期结果。
内容的提问来源于stack exchange,提问作者momo123321
相关产品推荐
相关产品推荐

