1 /*
2 题目描述:
3 对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,
4 将右侧部分移动到左边。给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。
5 测试样例:
6 "ABCDEFGH",8,4
7 返回:"FGHABCDE"
8 */
9 /*
10 eg: A = "ABCDEFGH", n = 8, p = 4
11 首先把A反转, A = "HGFEDCBA";
12 然后把[0,n-1-p-1] 和 [n-1-p, n-1]分别反战:
13 得到 FGHABCDE。
14 时间复杂度为O(n),空间复杂度为O(1)。
15 使用reverse函数反转。
16 */
17 #include <iostream>
18 #include <string>
19 using namespace std;
20
21 string rotateString(string A, int n, int p) {
22 if (n <= 0 || p <= 0 || p >= n)
23 return "";
24 reverse(A.begin(), A.end());
25 reverse(A.begin(), A.begin()+n-1-p);
26 reverse(A.begin()+n-1-p, A.end());
27 return A;
28 }
29
30 int main(){
31 string a;
32 cin >> a;
33 cout << rotateString(a,a.length(), 4);
34 return 0;
35 }