LeetCode 14.最长公共前缀Python代码错误排查:测试用例未通过求助
问题分析与修正方案
你的代码存在几个关键问题,导致无法得到正确结果:
- 初始前缀错误:你仅取了第一个字符串的首字符作为初始
prefix,这直接限制了前缀最长只能是1个字符,自然无法得到"fl"这样的结果。正确的初始前缀应该是整个第一个字符串,之后再逐步缩短到公共部分。 - 字符串不可变特性误解:Python中的字符串是不可变类型,没有
pop()方法,你的代码实际运行会抛出AttributeError,只是在测试用例中还没执行到这一步就返回了错误结果。 - 循环逻辑错误:对比逻辑混乱,应该逐个检查每个字符串与当前前缀的匹配情况,当发现不匹配时直接截断前缀,而不是尝试删除单个字符;同时不需要通过索引遍历字符串,直接遍历字符串本身更清晰。
修正后的代码(方法一:逐步缩短前缀)
from typing import List class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: # 处理空列表的边界情况 return "" prefix = strs[0] # 以第一个字符串作为初始前缀 for s in strs[1:]: # 从第二个字符串开始逐一对比 # 不断缩短前缀,直到当前字符串以该前缀开头 while not s.startswith(prefix): prefix = prefix[:-1] if not prefix: # 如果前缀被截空,直接返回空字符串 return "" return prefix
修正后的代码(方法二:逐字符对比)
这种方法更直观,逐个检查每个字符位置的一致性:
from typing import List class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: if not strs: return "" # 遍历第一个字符串的每个字符位置 for char_idx in range(len(strs[0])): current_char = strs[0][char_idx] # 检查其他所有字符串在该位置的字符是否一致 for s in strs[1:]: # 如果当前字符串长度不足,或字符不匹配,返回截止到当前位置的前缀 if char_idx >= len(s) or s[char_idx] != current_char: return strs[0][:char_idx] # 如果第一个字符串的所有字符都匹配,直接返回它 return strs[0]
内容的提问来源于stack exchange,提问作者childoflogos
相关产品推荐
相关产品推荐

