CS50 pset6 DNA代码跑通small.csv 运行large.csv时STR计数错误求助
核心错误定位
你代码的问题出在STR计数逻辑不符合题目要求:
CS50 DNA问题要求统计的是单种STR序列的最长连续重复次数,但你当前的实现是统计该STR在整条DNA序列中所有出现的总次数,不校验是否连续。这就是小样本测试刚好通过、大样本测试出错的核心原因:小样本里STR的出现刚好都是连续的,总出现次数等于最长连续次数,大样本里存在大量非连续的STR片段,你的统计结果就会远大于正确值。
修正代码
仅需要替换你原有的STR计数段即可:
# 原错误计数段替换为以下代码 for STR in Slist: max_repeat = 0 current_repeat = 0 str_length = len(STR) index = 0 while index < len(text): # 匹配到对应STR if text[index:index+str_length] == STR: current_repeat += 1 max_repeat = max(max_repeat, current_repeat) # 跳一个STR长度,判断下一段是否连续匹配 index += str_length else: # 连续中断,重置当前计数 current_repeat = 0 index += 1 STRdict[STR] = max_repeat
替换后重新运行,small.csv和large.csv的测试结果都会符合预期。
内容的提问来源于stack exchange,提问作者Jirapath Tharasena
相关产品推荐
相关产品推荐

