求助: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))
代码说明
- 正确分割子串:通过
range(0, len(string), k)生成起始索引,每次截取string[i:i+k]得到长度为k的连续子串,完全符合题目要求。 - 简洁去重逻辑:用列表
seen记录已出现的字符,遍历子串时只添加未出现过的字符,既保证顺序又完成去重,比OrderedDict更直观。
内容的提问来源于stack exchange,提问作者vix
相关产品推荐
相关产品推荐

