仅供自己学习
思路:
可以直接把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⁻¹B⁻¹) ⁻¹ = 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 };