题意理解
给定一个字符串,长度为cnt,指定数字n,移动前n个字符到末尾,输出移动后的字符串
问题分析
通过3次调换实现
第一次是前后调换
第二次是调换前cnt-n个字符,调换后n个字符。即可完成。
难点是:调换需要指定中间位置,以及对调的位置。
花了好长时间。头疼。
其他
链接
class Solution {
public:
string reverseLeftWords(string s, int n) {
int cnt = s.size();
//整体翻转
//cout << cnt / 2 << endl;
for (int i = 0; i < cnt/2; i++) {
int tmp = s[i];
s[i] = s[cnt - 1 - i];
s[cnt-i - 1] = tmp;
}
//cout << s << endl;
//反转前半部分
//cout << (cnt-n)/2 - 1 << endl;
for(int i = 0; i <= (cnt-n)/2 - 1; i++) {
int tmp = s[i];
s[i] = s[cnt - n - 1 - i];
s[cnt -i - n - 1] = tmp;
}
//cout << s << endl;
//反转后半部分
//cout << cnt - n/2 - 1 << endl;
for (int i = 0; i <= n/2 - 1; i++) {
int tmp = s[cnt - n + i];
s[cnt - n + i] = s[cnt - 1 - i];
s[cnt - 1 - i] = tmp;
}
return s;
}
};