题目难度:简单
考察内容:字符串
题目内容:对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
题目分析:可以将字符串看成两段,然后交换一下位置即可,如图
图片说明
如何实现这个操作呢,下面给出两种做法
算法1:
先定义一个字符串,遍历两遍str,第一遍将后一段加入,第二遍将第一段加入即可
代码如下

class Solution {
public:
    string LeftRotateString(string str, int n) {
        if (n > str.size()) return str;
        //return str.substr(n)+str.substr(0,n);
        string s;
        //定义转换后的字符串
        for(int i=n;i<str.size();i++)
            s.push_back(str[i]);
        //第一次遍历加入后一段
        for(int i=0;i<n;i++)
            s.push_back(str[i]);
        //第二次遍历加入前一段
        return s;
        //返回答案
    }
};

算法2
直接调用stl里面的substr即可完成字符串截取操作
substr有两个参数,第一个定义从什么位置开始截取,第二个参数是截取的长度,第二个参数为空时时截取到最后
代码一行非常简洁

class Solution {
public:
    string LeftRotateString(string str, int n) {
        if (n > str.size()) return str;
       /return str.substr(n)+str.substr(0,n);
    }
};

时间复杂度O(n)
空间复杂度O(n)
上面两种做法本质上是一样的,后一种是用stl直接实现的