Python调试:最长递增字母序列输出beg而非beggh原因咨询
故障核心诱因
- 错误的临时序列重置操作是输出截断的直接原因:原代码在「检测到当前连续序列长度超过已记录最长值」的分支中,额外执行了
bigString = s[0]的重置语句,直接打断了当前连续序列的拼接流程。
对应测试字符串beggh段的运行逻辑:当拼接出长度为3的beg、触发最长序列更新逻辑时,代码无理由将存储当前连续序列的变量bigString重置为字符串首字符a,直接丢失了beg这个拼接基线。后续遇到序列后续的g、h字符时,代码从被重置的a开始拼接,再也无法把g、h续接到beg后面,自然无法生成完整的beggh。 - 临时序列的重置边界完全错误:作为存储当前正在遍历的连续递增序列的临时变量
bigString,仅应当在遇到字典序下降的断点时重置,和最长序列的更新操作没有任何关联,不该在更新最长记录的分支内被随意修改。
修正后可正确输出结果的参考代码
s = 'azcbobobegghakl' bigString = s[0] longW = s[0] for i in range(len(s)-1): if s[i+1] >= s[i]: bigString += s[i+1] # 仅在最长记录需要更新时赋值,不改动当前正在拼接的临时序列 if len(longW) < len(bigString): longW = bigString else: # 仅在遇到字典序下降的断点时,重置当前拼接的临时序列 bigString = s[i+1] print(longW)
运行上述修正代码后,将正确输出预期结果beggh。
内容的提问来源于stack exchange,提问作者Jeddles
相关产品推荐
相关产品推荐

