1 条题解
-
0
【例70.3】 单词翻转
解题思路
在整行中定位每段连续非空格区间[l,r),只反转该区间。空格位置原封不动,多个空格及首尾空格全部保留。
正确性说明
依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。
易错点
不能用分词后重新拼接,容易丢掉原空格数量。
复杂度
时间O(L),空间O(L)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string s; getline(cin, s); for (size_t l = 0; l < s.size();) { if (s[l] == ' ') { l++; continue; } size_t r = l; while (r < s.size() && s[r] != ' ') r++; reverse(s.begin() + l, s.begin() + r); l = r; } cout << s << "\n"; return 0; }
- 1