剑指 Offer 58 - II. 左旋转字符串

时间:2021-03-16 14:08:17   收藏:0   阅读:0

仅供自己学习

 

思路:

可以直接把0~n-1的位置的元素加入到s后面,然后再把0~n-1的元素删除即可。分别调用append,erase函数

 

代码:

1 class Solution {
2 public:
3     string reverseLeftWords(string s, int n) {
4         
5         s.append(s,0,n);
6         s.erase(0,n);
7         return s;
8     }
9 };

 

还有一种 (A?1B?1) ?1 = BA,例如a,b,c,d,e  , n=2.  反转A,b,a,c,d,e 反转B,b,a,e,d,c,反转A逆B逆,c,d,e,a,b

 

代码:

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        reverse(s.begin(),s.begin()+n);
        reverse(s.begin()+n,s.end());
        reverse(s.begin(),s.end());
        return s;
    }
};

 

如果遍历加入一个新的string,可以考虑从i=n开始,循环条件为i<n+s.length(),s的下标为 i%s.length,这样就弄从n加到s.length,在加入0-n的元素。

 

还可调用C++的STL中rotate算法

1 class Solution {
2 public:
3     string reverseLeftWords(string s, int n) {
4         rotate(s.begin(),s.begin()+n,s.end());
5         return s;
6     }
7 };

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!