题目描述


汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc” 。

示例1

  • 输入: "abcXYZdef",3------
  • 返回值: "XYZdefabc"

题解1:暴力三次for循环


步骤:

  1. 第一次for循环将str中的字符输入到数组vector v中
  2. 第二次for循环将左移的字符全部插入到v数组的后面
  3. 第三次for循环,取出数组中的字符,并进行字符拼接

代码:

  class Solution {
public:
    string LeftRotateString(string str, int n) {
        //题解1:字符串拼接
        if(str.size() == 0) return "";
        vector<char> v;
 		// 第一次for循环将str中的字符输入到数组vector<char> v中
        for(int i=0;i<str.size();i++){
            v.push_back(str[i]);
        }
        //第二次for循环将左移的字符全部插入到v数组的后面
        for(int i = 0;i<n;i++){
            v[str.size()+i] = v[i];
        }
        string result="";
  		//第三次for循环,取出数组中的字符,并进行字符拼接
        for(int i = 0;i<str.size();i++){
            result+=v[n+i];
        }
        return result;
    }
};