You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iter_position_reverse测试用例不通过及无结果输出问题排查

问题排查与修复:iter_position_reverse与iterrative_insertion函数异常

问题概述

iter_position_reverse函数测试用例无法通过,执行后无法输出预期验证结果("We did it."或"It did not work for {R}"),核心原因是两个函数存在逻辑错误,导致重构后的字符串无法还原原输入。


1. iterrative_insertion函数的Bug与修复

原代码问题

offset + len(S)仅做数值计算,未将结果赋值给offset,导致偏移量始终为0,插入位置完全错误。

修复后的代码

def iterrative_insertion(S, positions):
    R = S
    offset = 0
    for pos in positions:
        R = R[:pos + offset] + S + R[pos + offset:]
        offset += len(S)  # 修复:将计算结果赋值给offset,更新偏移量
    return R

# Example usage
S = "abcdabd"
positions = [0, 1, 16]
result = iterrative_insertion(S, positions)
expected = 'aabcdabdbcdabdababcdabdcdabd'
print(expected)
print(result)
print(result == expected)
print(len(result), len(S), len(expected))

2. iter_position_reverse函数的Bug与修复

原代码问题

  • 匹配逻辑错误:错误匹配原字符串R的开头,而非当前构建的S的开头
  • 匹配后未正确跳转:找到匹配后仅移动一个字符,导致重复将S的字符添加到S中,破坏初始字符串的提取逻辑

修复后的代码

import iterrative_insertion

def iter_position_reverse(R):
    S = ""
    positions = []
    i = 0
    n = len(R)
    while i < n:
        j = 0
        # 修复:匹配当前已构建的S的开头,而非原字符串R的开头
        while j < len(S) and i + j < n and S[j] == R[i + j]:
            j += 1
        # 完全匹配S时,记录位置并跳过整个S的长度
        if j == len(S) and len(S) > 0:  # 避免S为空时误记录位置
            positions.append(i)
            i += len(S)
        else:
            # 不匹配则添加当前字符到S,移动一个位置
            S += R[i]
            i += 1
    return S, positions

# Test cases
test_strings = [
    "abcdabdaabcdabdbcdabdabcdabd",
    "aabcdabdbcdabdabcdabdabcdabd",
    "aababababcdabdcdabdcabcdabddabdcdabdbcdabd",
    "aaaaaaababababcdabdcdabdcabcdabddabdcdabdbcdabdababababcdabdcdabdcabcdabddabdcdabdbcdabdababababcdabdcdabdcabcdabddabdcdabdbcdabdbabababcdabdcdabdcabcdabddabdcdabdbcdabdababababcdabdcdabdcabcdabddabdcdabdbcdabd",
    "ddodoremefasolasiremefasolasioremdoredoremefasolasimefasolasiefasolasi",
    "abdaabcdabdbcdabdb"
]

for R in test_strings:
    S, positions = iter_position_reverse(R)
    print("Input String:", R)
    print("S:", S)
    print("Positions:", positions)
    print()
    reconstructed = iterrative_insertion.iterrative_insertion(S, positions)
    if reconstructed == R:
        print("We did it.")
    else:
        print(f"It did not work for {R}")

修复说明

  1. iterrative_insertion:修正偏移量更新逻辑,确保每次插入后偏移量正确累加,保证后续插入位置的准确性
  2. iter_position_reverse:
    • 调整匹配逻辑,改为匹配当前构建的S,符合算法“提取初始字符串+记录插入位置”的设计意图
    • 找到完整匹配时直接跳过整个S的长度,避免重复添加字符到S中,确保S为原初始字符串,同时正确记录所有插入位置

内容的提问来源于stack exchange,提问作者SJ Brigante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:25:11