day9-题目:剑指Offer58-II.左旋转字符串

题目:剑指Offer58-II.左旋转字符串

力扣题目链接(opens new window)

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”

示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”

限制:
1 <= k < s.length <= 10000

思路

这道题要求不使用额外空间还是有点难度的。

整体思路如下

  • 反转前n位
  • 反转后n位
  • 反转全部

代码如下:

class Solution {
public:
    void Reverse(string &s,int left, int right)
    {
        while(left<=right){
            swap(s[left++],s[right--]);
        };
    }
    string reverseLeftWords(string s, int n) {
        Reverse(s,0,n-1);
        Reverse(s,n,s.size()-1);
        Reverse(s,0,s.size()-1);
        return s;
    }
};

你可能感兴趣的:(算法,算法)