剑指offer——58.2 左旋转字符串

58.2 左旋转字符串

NowCoder

题目描述

1
2
3
4
5
6
Input:
S="abcXYZdef"
K=3

Output:
"XYZdefabc"

解题思路

先将 “abc” 和 “XYZdef” 分别翻转,得到 “cbafedZYX”,然后再把整个字符串翻转得到 “XYZdefabc”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*

输入:"abcdefg" , n=2
考虑先将字符串倒个 "gfedc ba" 可以尝试两次倒装
输出:"cdefgab"

*/

#if 1 //使用库函数
class Solution {
public:
string leftRotateString(string str, int n) {
if(str.empty() || n < 0 || n > str.size()) return str;
for(int i = 0, j = str.size() - 1; i < j; i ++, j --) swap(str[i], str[j]);
for(int i = 0, j = str.size() - n - 1 ; i < j; i ++, j --) swap(str[i], str[j]);
for(int i = str.size() - n, j = str.size() - 1; i < j; i ++, j --) swap(str[i], str[j]);
return str;
}
};
#endif

#if 0 //使用库函数
class Solution {
public:
string leftRotateString(string str, int n) {
if(str.empty() || n < 0 || n > str.size()) return str;
reverse(str.begin(), str.end());
reverse(str.begin(), str.end() - n); //左闭区间 右开
reverse(str.end() - n, str.end());
return str;
}
};
#endif
创作不易,欢迎打赏!
-------------本文结束感谢您的阅读-------------