左旋转字符串

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

 

示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
 

限制:

1 <= k < s.length <= 10000

想法一:那就是运用字符反转来解决问题,经历三次反转:

class Solution {
public:
    void reversePart(string& s,int begin,int end) {
        for (; begin <= end; begin++, end--) {
            swap(s[begin],s[end]);
        }
    }
    string reverseLeftWords(string s, int n) {
        reversePart(s,0,s.size()-1);//反转全部元素
        reversePart(s,s.size()-n,s.size()-1);//反转后半部分的元素
        reversePart(s,0,s.size()-1-n);//反转前半部分的元素
        return s;
    }
};

想法二:那就是暴力解法:选用一个新的数组来记录这个新的数组,最后返回这个数组:

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        string nums(s.size(),0);//来记录答案的数组
        int iter = nums.size() - n;//这个新的数组指针应该开始的位置
        for (int i = 0; i < s.size(); i++) {
            if (iter >= nums.size()) {//当该新指针超出数组大小的时候,那么让它从零开始
                iter -= nums.size();
            }
            nums[iter] = s[i];
            iter++;
        }
        return nums;
    }
};

 

posted @ 2022-09-06 15:27  铜锣湾陈昊男  阅读(5)  评论(0)    收藏  举报