https://kamacoder.com/problempage.php?pid=1065

<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;
}