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

求助:Hackerrank中Merge the tools代码仅过样例,未通过其他测试用例

问题排查与修复

你的代码能通过样例是因为样例中len(string)/k刚好等于k(9/3=3),但其他测试用例中这个逻辑完全错误,核心问题出在子串分割的逻辑:

错误点分析

题目要求将输入字符串分割为每个长度为k的连续子串,但你的代码里计算的length = int(len(string)/k),然后用textwrap.wrap(string, length)按这个length分割,这完全搞反了k和分割长度的关系。比如:

  • 若k=2、字符串为"AABBAACC"(长度8),你的代码会分割成"AABB"和"AACC"两个子串,而正确应该是"AA"、"BB"、"AA"、"CC"四个长度为k=2的子串。
  • 这种错误导致后续去重处理的对象完全不符合题目要求,自然无法通过其他测试用例。

另外,Python 3.7+ 中普通字典已经默认保持插入顺序,不需要特意用OrderedDict,可以简化去重逻辑。

修正后的代码

def merge_the_tools(string, k):
    # 按长度k分割字符串,步长为k遍历
    for i in range(0, len(string), k):
        substring = string[i:i+k]
        # 去重并保持顺序:用列表记录已出现的字符,遍历子串添加未出现的字符
        seen = []
        for char in substring:
            if char not in seen:
                seen.append(char)
        print(''.join(seen))

代码说明

  1. 正确分割子串:通过range(0, len(string), k)生成起始索引,每次截取string[i:i+k]得到长度为k的连续子串,完全符合题目要求。
  2. 简洁去重逻辑:用列表seen记录已出现的字符,遍历子串时只添加未出现过的字符,既保证顺序又完成去重,比OrderedDict更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:06:09