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

Python实现任意长度字符串逐对交换相邻字符及索引越界修复

问题根因

原代码采用步长为2的遍历逻辑,没有做边界校验:当输入字符串长度为奇数时,最后一轮循环的i值会落到字符串最后一个字符的索引上,此时强行访问i+1位置就会超出有效索引范围,触发越界报错。另外原代码导入的sys、math模块未被实际使用,可直接删除。

兼容任意长度的调整方案

核心处理逻辑:逐对交换相邻字符时,如果遇到没有配对的单个字符(即奇数长度字符串的最后一个落单字符),不执行交换操作,直接保留该字符即可。

基于原逻辑的最小改动

不需要重构原有代码结构,仅在循环内部增加边界判断即可:

t = input()
lst = []
str_len = len(t)
for i in range(0, str_len, 2):
    # 边界场景:当前位置是最后一个无配对字符,直接加入结果
    if i + 1 >= str_len:
        lst.append(t[i])
        continue
    # 正常执行相邻两个字符的交换
    lst.append(t[i+1])
    lst.append(t[i])

answer = "".join(lst)
print(answer)

效果验证

  • 偶数长度输入01ABxy,输出为10BAyx,和原有预期完全匹配
  • 奇数长度输入ReadabilityCounts,前面的字符逐对完成交换后,最后一个无配对的字符会直接保留,不会触发索引越界报错

更精简的Python式实现

如果希望减少冗余的分支判断,可以先完成所有可配对位置的相邻交换,最后单独处理奇数长度下的落单字符:

t = input()
str_len = len(t)
# 遍历所有可配对的索引位置,完成相邻交换
result = "".join(t[i+1] + t[i] for i in range(0, str_len - 1, 2))
# 补全奇数长度场景下的最后一个落单字符
if str_len % 2 == 1:
    result += t[-1]
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 01:24:02