列表重叠字符串序列合并实现与现有代码异常问题求解
相邻重叠字符串合并问题分析与实现
现有代码的问题
你的代码存在两个核心逻辑错误:
- 仅对列表的第一个元素和最后一个元素做拼接,完全跳过了中间所有元素的处理,仅当列表长度为2时有可能得到正确结果
a.index(b[0])只会取目标字符的首次出现位置,无法判断两个字符串的最大重叠长度,遇到首字符重复出现的场景会直接截断错误
实现思路
你已经提前将存在重叠的字符串调整为相邻排列,只需要按顺序遍历列表,逐个合并相邻的两个字符串即可:
- 初始结果为列表第一个元素
- 从第二个元素开始,依次计算当前结果与下一个待合并字符串的最大重叠长度k,k满足:当前结果的最后k个字符 = 待合并字符串的前k个字符
- 将待合并字符串去掉前k个字符后拼接到当前结果末尾
- 遍历完成后得到最终合并结果
实现代码
def merge_adjacent_overlap(str_list): if not str_list: return [] merged = str_list[0] for current in str_list[1:]: max_overlap = 0 # 从最大可能的重叠长度开始倒序查找 for k in range(min(len(merged), len(current)), 0, -1): if merged.endswith(current[:k]): max_overlap = k break merged += current[max_overlap:] return [merged] # 测试短序列示例 test1 = ['aacc','accb','ccbe'] print(merge_adjacent_overlap(test1)) # 输出:['aaccbe'] # 测试长序列 test2 = ['TGT','GTT','TTC','TCC','CCC','CCT','CCT','CTG','TGA','GAA','AAG','AGC','GCG','CGT','TGC','GCT','CTC','TCT','CTT','TTT','TTT','TTC','TCA','CAT','ATG','TGG','GGA','GAT','ATC','TCT','CTA','TAT','ATG','TGA','GAT','ATT','TTC'] print(merge_adjacent_overlap(test2))
内容的提问来源于stack exchange,提问作者PWier
相关产品推荐
相关产品推荐

