LeetCode最长公共前缀问题求助:测试用例["a","a","b"]未通过
解决LongestCommonPrefix测试用例
["a","a","b"]的错误问题 你的代码在处理测试用例["a","a","b"]时返回'a',但正确输出应为"",核心问题出在逻辑设计上:
- 仅相邻比较而非全局验证:代码只检查相邻两个字符串的当前字符是否相同,就将该字符加入公共前缀,没有验证所有字符串的对应位置是否一致。比如测试用例中,前两个字符串第0位是
'a',但第三个字符串第0位是'b',代码却未检查这一点。 - 循环终止条件错误:当处理到第二个字符串(
i=1)时,j已等于最短字符串的长度,直接返回了已累加的前缀,跳过了对第三个字符串的验证。
修正方案一:纵向扫描(逐个字符验证所有字符串)
def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if not strs: return "" # 以第一个字符串为基准,遍历每个字符位置 for j in range(len(strs[0])): current_char = strs[0][j] # 检查其他所有字符串的第j位是否一致 for i in range(1, len(strs)): # 若当前字符串长度不足,或字符不匹配,返回前j位 if j >= len(strs[i]) or strs[i][j] != current_char: return strs[0][:j] # 所有字符都匹配,返回基准字符串 return strs[0]
修正方案二:横向扫描(逐步缩小公共前缀)
def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ if not strs: return "" prefix = strs[0] for s in strs[1:]: # 不断缩短prefix,直到它是当前字符串的前缀 while not s.startswith(prefix): prefix = prefix[:-1] if not prefix: return "" return prefix
内容的提问来源于stack exchange,提问作者user15462387
相关产品推荐
相关产品推荐

