<aside> 💡
本题可以使用反转来巧解——整体反转一次,再以第k个元素为界分成两段反转
</aside>
string rightRotate(int k, string s) {
// 先整体反转一次
std::reverse(s.begin(), s.end());
// 以下标k为界,前后分别反转
std::reverse(s.begin(), s.begin() + k);
std::reverse(s.begin() + k, s.end());
return s;
}
非原地移动——使用一个临时量记录尾部k个元素
string rightRotate(int k, string s) {
string temp(k, ' ');
int n = s.size();
for (int i = 0; i < k; ++i)
temp[i] = s[n - k + i];
for (int i = n - k - 1; i >= 0; --i)
s[i + k] = s[i];
for (int i = 0; i < k; ++i)
s[i] = temp[i];
return s;
}