- 题目:剑指Offer58-Ⅰ.左旋转字符串
把一个给定字符串s的前k个字符和后面的字符交换位置; - 思路:
1.整体翻转+局部反转2次:时间O(n),空间O(1)
class Solution {
public:
void reverse(string& s, int l, int r) {
for (; l < r; ++l, --r) {
swap(s[l], s[r]);
}
}
string reverseLeftWords(string s, int k) {
int n = s.size();
if (k > n) return s;//说明没法旋转
reverse(s, 0, n - 1);
reverse(s, 0, n - k - 1);
reverse(s, n - k, n - 1);
return s;
}
};