1 条题解
-
0
📝 题目大意
给定一个长度为偶数的小写字母字符串 ,依次将第 个和第 个字符交换、第 个和第 个字符交换……直至末尾,输出交换后的字符串。
💡 解题思路
- 题目分析: 长度不超过 ,且保证为偶数,直接模拟即可。本质上是将字符串按相邻字符两两分组,每组内部交换顺序。
- 算法推导:遍历字符串,步长为 (即每次处理一对相邻字符)。对于每一对 ( 从 开始),先输出 再输出 ,即可完成交换后的输出。代码中使用
printf("%c%c", s[i+1], s[i])直接按交换后的顺序打印,无需真正修改原字符串。 - 边界与细节:题目保证 长度为偶数,因此不会出现落单字符。代码中
if (i+1 < len)的 else 分支属于防御性写法,实际不会触发。
⏱️ 复杂度分析
- 时间复杂度:,其中 为字符串长度,只需一次遍历。
- 空间复杂度:,仅使用常数额外空间。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; int main () { string s; cin >> s; int len = s.size(); // 步长为 2,每次处理一对相邻字符 for (int i = 0; i < len; i += 2) { // 按交换后的顺序输出:先输出 s[i+1] 再输出 s[i] if (i + 1 < len) printf("%c%c", s[i + 1], s[i]); else printf("%c", s[i]); // 防御性写法,题目保证偶数长度不会触发 } return 0; }
- 1
信息
- ID
- 685
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者