力扣:剑指Offer58-II.左旋转字符串
链接https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
思路1:一次往左移动一位,循环n次,
代码如下:
class Solution {
public:
string reverseLeftWords(string s, int n) {
for(int i =0;i<n;i++){
int temp = s[0];
for(int j=1;j<s.size();j++){
s[j-1]=s[j];
}
s[s.size()-1]=temp;
}
return s;
}
};
时间复杂度为O(mn),复杂度较高;
思路2:先将字符串s的[0,n-1]反转,在将剩余的[n,s.size()-1]反转,最后将整个字符转反转,即三次反转。
代码如下:
class Solution {
public:
string reverseLeftWords(string s, int n) {
strSwap(s,0,n-1);
strSwap(s,n,s.size()-1);
strSwap(s,0,s.size()-1);
return s;
}
void strSwap(string &s,int begin,int end){
while(begin<end){
int temp = s[begin];
s[begin]=s[end];
s[end]=temp;
end--;
begin++;
}
}
};