题目描述

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

【思路1】将第一个字符移到最后面,执行n次,时间复杂度为O(m*n)。

 1 class Solution {
 2 public:
 3     string LeftRotateString(string str, int n) {
 4         if(str.length() <= n)
 5             return str;
 6         for(int i = 0;i < n;i ++){
 7                char c = str[0];
 8             for(int j = 0;j < str.length() - 1;j ++)
 9                 str[j] = str[j + 1];
10             str[str.length() - 1] = c;
11         }
12         return str;
13     }
14 };

【思路2】使用STL中的reverse()函数,时间复杂度O(n)。

假设原序列有n位,循环左移i位的过程如下:

(1)reverse(0,i-1); (2)reverse(i,n-1); (3)reverse(1,n-1);

例如原序列:abcdefg,循环左移3位:(1) cba defg  (2)cba gfed  (3) defgabc
代码就非常简单了,而且reverse操作非常简单,效率高也不容易出错,要记住一点就是STL中的迭代器是左闭右开区间,所以reverse操作的第二个参数需要往后移动一位。
 1 class Solution {
 2 public:
 3     string LeftRotateString(string str, int n) {
 4         if(str.length() <= n)    return str;
 5         reverse(str.begin(),str.begin() + n);
 6         reverse(str.begin() + n,str.end());
 7         reverse(str.begin(),str.end());
 8         return str;
 9     }
10 };

【思路3】使用substr()函数。

注:str.substr(pos, n)返回一个字符串,包含s中从下标pos开始的n个字符。

 1 class Solution {
 2 public:
 3     string LeftRotateString(string str, int n) {
 4         int len = str.length();
 5         if(len <= n) return str;
 6         n %= len;
 7         str += str;
 8         return str.substr(n,len);
 9     }
10 };

转载于:https://www.cnblogs.com/lca1826/p/6525138.html

[剑指Offer] 43.左旋转字符串相关推荐

  1. LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串

    LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串 1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作 ...

  2. 剑指offer之左旋转字符串

    1 题目 字符串的左旋转操作是把字符串前面的若干字符转移到字符串尾部,比如字符串abcdef和数字2,函数返回左旋转得到的结果是cdefgab 2 思路 先反转字符串所有,通过数字n找到的边界 ,然后 ...

  3. 《剑指offer》左旋转字符串

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

  4. 《剑指offer》-左旋转字符串

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

  5. 剑指offer:左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&quo ...

  6. 剑指offer系列48---左旋转字符串

    [题目]对于一个给定的字符序列S,旋转指定位置左边的字符到右边.. * 例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc&q ...

  7. 【LeetCode】剑指 Offer 43. 1~n 整数中 1 出现的次数

    [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 文章目录 [LeetCode]剑指 Offer 43. 1-n 整数中 1 出现的次数 package offer;pub ...

  8. 【LeetCode 剑指offer刷题】字符串题6:67 把字符串转成整数

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 67 把字符串转成整数 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符 ...

  9. 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Valid Palindrome Given a string, determine if it is a pali ...

  10. 剑指offer 算法(数组 字符串)

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解析:解题思路:从二维 ...

最新文章

  1. Matlab之switch-case语句
  2. oenwrt 进不了bios_为什么进不bios_进不了bios怎么解决?
  3. 概率论笔记:随机数、概率分布(正态分布)、中心极限定理(大数定理)
  4. 后台弹框。刷新不提示确认VB或.NET
  5. KinectV2+Ubuntu 14.04+Ros 配置
  6. 文本生成系列之预训练模型
  7. php api接口怎么写,php如何写api接口?
  8. 最全地理数据下载地址/全国地表径流量数据获取/土地利用数据/植被类型数据/NPP数据/土壤侵蚀数据/土壤质地分类/降雨量栅格数据/太阳辐射量数据
  9. mame模拟器版大家来找碴外挂,python源码
  10. Python学习笔记3——条件语句及循环语句
  11. app logo显示不全没有铺满
  12. 我的世界服务器核心文件,minecraft1.9服务端核心Paper
  13. Linux内核源代码下载
  14. 从装大象中我们学会了什么设计模式
  15. TI电量计--BQ34Z100踩坑总结
  16. 做为一个新手如何架设传奇
  17. 关于直播的技术细节都在这里
  18. openssh离线升级8.8
  19. [ICCV2019论文阅读]Asymmetric Non-local Neural Networks for Semantic Segmentation
  20. 《偷影子的人》读后感

热门文章

  1. C语言字符串函数(strcpy,strlen,strcat,stsstr,strchr,strcmp,memcpy,memmove)
  2. android控制软键盘显示与隐藏
  3. 插件开发之360 DroidPlugin源码分析(三)Binder代理
  4. java math.floordiv,Math类的常用方法--田小江
  5. java aes加密 cbc_AES加密,CBC模式,0填充
  6. 网络推手团队_辛8工作室,被列入经营异常名单!工作室发声明解释!二子爷喊话辛8:你能强大过马云吗?达少太忙没有时间玩!团队断水断粮式野外生存!...
  7. 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
  8. 二位数组的示例 go语言
  9. Python 多线程基本步骤
  10. 2020服务器虚拟化市场容量,2020年服务器市场的五大技术和市场趋势