抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。


思路

  • 用额外空间临时存储子字符串。
  • 多次局部反转。

学习点

  • 局部字符串反转。

代码

子字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

int main()
{
int k;
string s;
while (cin >> k)
{
cin >> s;
// 用临时字符串保存后面 k 个字符
string last_k = s.substr(s.length() - k, k);
// 用临时变量保存前面的字符
string first_sub = s.substr(0, s.length() - k);
// 拼接
string res = last_k + first_sub;

cout << res << endl;
}

return 0;
}

局部反转:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<algorithm>
using namespace std;
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;

}