字符串交替拼接:首串更长时末尾字符重复的Bug修复求助
问题分析与修复
你的代码出现重复字符的问题,核心原因是:当i超出较短字符串的长度时,try块里已经成功将较长字符串的words1[i]添加到了result中,随后触发IndexError进入except块时,又错误地再次添加了该字符(通过words1[-remainingWords]),导致重复。
以你的测试用例为例:i=5时,words1[5](字符b)已经被加入result,但except块里又追加了一次b,最终结果多了一个重复的字符。
修复方案
方案一:修正原有代码逻辑
调整except块的处理逻辑,不再重复添加已成功加入的字符,而是直接追加剩余的子串,完成后跳出循环避免重复处理:
words1 = "rmiiab" words2 = "eanna" maxLength = max(len(words1), len(words2)) result = [] for i in range(maxLength): try: result.append(words1[i]) result.append(words2[i]) except IndexError: # 追加剩余子串后直接终止循环 if len(words1) > len(words2): result.extend(words1[i+1:]) else: result.extend(words2[i+1:]) break print(''.join(result))
方案二:更简洁高效的实现
放弃try-except的容错方式,先处理两个字符串的公共长度部分完成交替拼接,再直接追加较长字符串的剩余部分,逻辑更清晰直观:
words1 = "rmiiab" words2 = "eanna" result = [] min_len = min(len(words1), len(words2)) # 处理公共长度的交替拼接 for i in range(min_len): result.append(words1[i]) result.append(words2[i]) # 追加剩余部分 if len(words1) > min_len: result.append(words1[min_len:]) elif len(words2) > min_len: result.append(words2[min_len:]) print(''.join(result))
两种方案运行后,测试用例都会输出正确结果remaininaab。
内容的提问来源于stack exchange,提问作者user19409398
相关产品推荐
相关产品推荐

