Python求解字符串列表最长公共前缀匹配长度的算法实现问题
最长公共前缀长度计算实现
需求规则
给定包含N个字符串的列表,输出最大整数n,使得列表内所有字符串的前n个字符完全相同(即统计所有给定字符串开头位置的连续匹配字符个数)。
现有代码问题汇总
- 循环边界错误:
for index in range(0,a)将传入的字符串列表直接作为range的入参,而非列表长度,运行时会直接触发类型报错,需替换为遍历列表长度range(len(a)) - 对比逻辑偏差:使用
np.equal(a[index], a[index-1])对比两个完整字符串,而非逐位比对同索引位置的单字符 - 变量未定义:循环中直接执行
i +=1,但变量i从未提前初始化,会触发NameError - 索引逻辑异常:取
a[index-1]的写法在index=0时会取到列表最后一个元素,不符合逐位校验的逻辑 - 递归逻辑失效:满足单次相等条件时直接返回
solution函数本身,既没有累计匹配长度,也没有完成全量校验,且引入的numpy依赖对实现无实际作用
可运行的正确参考代码
def solution(a): # 空列表直接返回0 if not a: return 0 # 取列表中最短字符串的长度,避免字符索引越界 min_str_len = min(len(s) for s in a) match_count = 0 # 逐字符位置校验所有字符串 for pos in range(min_str_len): # 提取当前位置的所有字符,去重后长度为1即代表全部匹配 if len({s[pos] for s in a}) == 1: match_count += 1 else: break return match_count # 配套测试用例 print(solution(['abcd', 'abce', 'abchg', 'abcfwqw', 'abcdfg'])) # 预期输出3 print(solution(['abcd', 'gbce', 'abchg', 'abcfwqw', 'abcdfg'])) # 预期输出0
实现逻辑说明
- 全程无需额外第三方依赖,通过集合去重的方式快速判断同位置字符是否完全一致,代码可读性与运行效率均衡
- 提前对最短字符串长度做截断,避免访问短字符串时触发索引越界错误
- 遇到第一个不匹配的字符位置即终止循环,无需遍历完所有可能位置即可得到正确结果
内容的提问来源于stack exchange,提问作者유승주
相关产品推荐
相关产品推荐

