面试题58(2):左旋转字符串

题目

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

解题思路

这道题怎么和上道题联系到一起呢

  1. 可以把“abcdefg”分为两部分。因为想把它的前两个字符移到后面,所以我们可以把前两个字符分为第一部分,后面的所有字符分到第二部分。
  2. 分别翻转这两部分,就得到“bagfedc”
  3. 翻转整个字符串,得到“cdefgab”

代码

class Solution{
  public:
    void Reverse(string &str,int left,int right)
    {
        while(left < right)
        {
            char temp = str[left];
            str[left]   = str[right];
            str[right]  = temp;

            left++;
            right--;
        }
    }
    
    string leftRotateString(string str ,int num)
    {
        int length = str.size();
        int left = 0;
        int right= 1;
        Reverse(str,left,right);
        
        Reverse(str,num,length-1);
        Reverse(str,left,length-1);
        return str;
    }
};

完整代码见Github

你可能感兴趣的:(面试题58(2):左旋转字符串)