剑指 offer:43、左旋转字符串

43. 左旋转字符串

题目描述

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

解题思路:

  • 思路1: 首先确定左移之后第一个字符在原字符串中的位置begin,然后从begin向后遍历完原字符串,然后从0开始遍历到begin,将两部分拼接即可
  • 思路2: begin为分界线,将两侧字符串分别反转,然后再将整个字符串反转

解答:

// 解法1:
class Solution {
public:
    string LeftRotateString(string str, int n) {
        int len = str.size();
        if(len == 0)
            return "";
        string res = "";
        int begin = n % len;
        for(int i = begin; i < len; ++i)
            res += str[I];
        for(int i = 0; i < begin; ++i)
            res += str[I];
        return res;
    }
};
// 解法2:
class Solution {
public:
    string LeftRotateString(string str, int n) {
        int len = str.size();
        if(len == 0)
            return "";
        int begin = n % len;
        reverse(str.begin(), str.begin() + begin);
        reverse(str.begin() + begin, str.end());
        reverse(str.begin(), str.end());
        return str;
    }
};

大家有兴趣可以访问我的个人博客,不定时更新一些内容哦!

图片来自必应壁纸
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容