代码随想录二刷 |字符串 |右旋转字符串
- 题目描述
- [解题思路 & 代码实现](#解题思路 & 代码实现)
题目描述
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。
例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。
输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。
输出:输出共一行,为进行了右旋转操作后的字符串。
样例输入:
2
abcdefg
样例输出:
fgabcde
数据范围:1 <= k < 10000, 1 <= s.length < 10000;
解题思路 & 代码实现
本题中,我们需要将字符串右移 n 位,字符串相当于分成了两个部分,如果n为2,符串相当于分成了两个部分,思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符再倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。
cpp
int main() {
int n;
string s;
cin >> n;
cin >> s;
int len = s.size();
reverse(s.begin(), s.end()); // 整体翻转
reverse(s.begin(), s.begin() + n); // 先翻转前一段,长度为 n
reverse(s.begin() + n, s.end()) // 再翻转后一段
cout << s << endl;
}