题目描述

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

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

 class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.length() <= n)
return str;
for(int i = ;i < n;i ++){
char c = str[];
for(int j = ;j < str.length() - ;j ++)
str[j] = str[j + ];
str[str.length() - ] = c;
}
return str;
}
};

【思路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操作的第二个参数需要往后移动一位。
 class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.length() <= n) return str;
reverse(str.begin(),str.begin() + n);
reverse(str.begin() + n,str.end());
reverse(str.begin(),str.end());
return str;
}
};

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

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

 class Solution {
public:
string LeftRotateString(string str, int n) {
int len = str.length();
if(len <= n) return str;
n %= len;
str += str;
return str.substr(n,len);
}
};

[剑指Offer] 43.左旋转字符串的更多相关文章

  1. 剑指Offer 43. 左旋转字符串 (字符串)

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

  2. 【剑指Offer】左旋转字符串 解题报告(Python)

    [剑指Offer]左旋转字符串 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  3. 【Java】 剑指offer(58-2) 左旋转字符串

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 ...

  4. Go语言实现:【剑指offer】左旋转字符串

    该题目来源于牛客网<剑指offer>专题. 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左 ...

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

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

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

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

  7. 剑指offer——67左旋转字符串

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

  8. 【剑指offer】左旋转字符串

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27366485 题目描写叙述: 汇编语言中有一种移位指令叫做循环左移(ROL),如今有个简单 ...

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

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

随机推荐

  1. 【模板】string中substr函数的运用

    substr有两种用法: 假设:string s = "0123456789" ;  //下标从0开始 ① string a = s.substr(5)               ...

  2. JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标

    分析: 外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置.鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量 第一步:求浏览器边框位置 x=e ...

  3. Java中Redis缓存

    1:安装 安装可分为单机版redis 和集群版redis  安装比较简单,自行百度即可 2:集成 pom文件中加入jedis 依赖,spring创建redis的application-resid配置, ...

  4. 01-HTML深入

    1.1  浏览器的工作原理 把一些标签解析成用户可视化的页面 1.2 HTML中的标签与元素 在HTML中以<xx>开始,以</xx>结束,比如<html>< ...

  5. Leecode刷题之旅-C语言/python-83删除排序链表中的重复元素

    /* * @lc app=leetcode.cn id=83 lang=c * * [83] 删除排序链表中的重复元素 * * https://leetcode-cn.com/problems/rem ...

  6. C# 测量程序运行时间

    using System.Diagnostics; Stopwatch watch = new Stopwatch(); watch.Start(); /* 需要测量运行时间的程序 */ watch. ...

  7. jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数

    在使用validation进行唯一性验证时,想各个模块写一个统一的方法,相统一参数名称,但是remote方法会默认把对应的参数传过去 如: 会把role.roleName默认作为变量提交过去 所以想自 ...

  8. spring location设置本地路径

    <context:property-placeholder location="file:D:/jdbc.properties"/> 直接在路径前加上 file:

  9. Java并发(多线程)

    一.多线程的基本概念 1.什么是进程.多进程有什么作用? 大家都使用计算机,当我们打开某一个软件的时候,其实就是启动了一个进程,可以打开任务管理器看看,我们打开的每一个软件,都是一个进程,在同一个操作 ...

  10. 【题解搬运】PAT_A1016 Phone Bills

    从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...