题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2位得到的结果”cdefgab”。
注意:
数据保证n小于等于输入字符串的长度。
样例
输入:”abcdefg” , n=2
输出:”cdefgab”

解法:反转字符串

以”abcdefg” , n=2为例,记s1=”ab”, s2=”cdefg”,s=s1|s2
左旋转要得到s=s2|s1,也就是将s1和s2左右翻转
但是同时也将s1和s2内部分别进行了反转,因此我们需要预先反转这两个子串进行抵消
时间复杂度O(n),空间复杂度O(1)

  1. class Solution {
  2. public:
  3. string leftRotateString(string str, int n) {
  4. reverse(str.begin(), str.begin() + n);
  5. reverse(str.begin() + n, str.end());
  6. reverse(str.begin(), str.end());
  7. return str;
  8. }
  9. };