Python长字符串重复序列识别及出现间距计算实现
核心实现方案
原实现仅提取了三字符序列的字符串值、未存储每个序列对应的出现索引,因此无法计算重复序列的间隔距离。要完成间距计算,核心是在提取三元组时同步追踪每个序列的出现位置,具体落地逻辑如下:
- 建立字典映射结构,key为三字符序列本身,value为该序列所有出现的起始索引列表
- 遍历字符串的所有有效三字符切片位置,生成三元组并将对应起始索引追加到映射结构中
- 筛选出出现次数≥2的三元组,计算同一三元组相邻两次出现的起始索引差值,即为要求的间距值
- 按指定格式整理序列与间距的对应关系,生成最终输出列表
可直接运行的代码
from collections import defaultdict A = "AEJXKWKJSSSJKZJLJLEJSSLKXMPPLSSKKDNEMSMLDMM" # 存储每个三元组的所有出现起始位置 trigram_positions = defaultdict(list) # 遍历所有有效切片位置(与原列表推导逻辑的切片范围完全一致) for start_idx in range(len(A) - 2): trigram = A[start_idx:start_idx+3] trigram_positions[trigram].append(start_idx) repeat_result = [] # 筛选重复序列并计算间距 for trigram, positions in trigram_positions.items(): # 跳过仅出现一次的序列 if len(positions) < 2: continue # 计算相邻出现位置的索引差,即间距 for i in range(1, len(positions)): gap = positions[i] - positions[i-1] repeat_result.append(f"{trigram}:{gap}") # 按要求格式输出 print(f"Repeat_Letter : [{', '.join(repeat_result)}]")
运行结果说明
针对给定测试字符串,代码会自动定位所有重复三字符序列,计算规则与示例中的间隔逻辑完全匹配。若某一三元组出现超过2次,代码会自动生成每一组相邻出现的间距值,无需额外调整。
- 默认间距为两次出现的起始索引差值,若需要计算两个重复序列中间间隔的字符数量(不含序列本身),可将间距计算逻辑调整为
gap = positions[i] - positions[i-1] - 3
内容的提问来源于stack exchange,提问作者Emma Lim
相关产品推荐
相关产品推荐

