-
Notifications
You must be signed in to change notification settings - Fork 0
/
剑指offer 42 左旋转字符串
42 lines (41 loc) · 1.13 KB
/
剑指offer 42 左旋转字符串
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
34
35
36
37
38
39
40
41
42
剑指offer 42 左旋转字符串
//汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,
//就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,
//请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,
//要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
string LeftRotateStringCircle(string str, int n) {
if (str.empty()) return "";
deque<char> q;
for (int i=0;i<str.size();i++){
q.push_back(str[i]);
}
while(n!=0) {
char tmp = q.front();
q.pop_front();
q.push_back(tmp);
n--;
}
string res="";
for (int i=0;i<q.size();i++){
res = res+q[i];
}
return res;
}
string LeftRotateString(string str, int n) {
if (str.empty()) return "";
n = n % str.size();
reverse(str.begin(), str.end());
reverse(str.begin(), str.begin()+str.size()-n);
reverse(str.begin()+str.size()-n, str.end());
return str;
}
//自写reverse函数
void reverse1(string& str, int s, int e){
while (s < e) {
char temp = str[s];
str[s] = str[e];
str[e] = temp;
s++;
e--;
}
}