文章目录

  • 1 题目
  • 2 解决方案
    • 2.1 思路
    • 2.2 时间复杂度
    • 2.3 空间复杂度
  • 3 源码

1 题目

题目:旋转字符串(Rotate String)
描述:给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。

  1. offset >= 0
  2. str的长度 >= 0
  3. 原地旋转意味着需要在函数中更改字符串s。你不需要返回任何东西。

lintcode题号——8,难度——easy

样例1:

输入:
str = "abcdefg"
offset = 3
输出:"efgabcd"
解释:注意是原地旋转,即str旋转后为"efgabcd"

样例2:

输入:
str = "abcdefg"
offset = 0
输出:"abcdefg"
解释:注意是原地旋转,即str旋转后为"abcdefg"

样例 3:

输入:
str = "abcdefg"
offset = 10
输出:"efgabcd"
解释:注意是原地旋转,即str旋转后为"efgabcd"

2 解决方案

2.1 思路

  对于旋转排序数组,经常使用的操作是三步翻转法,找到中间位置,翻转左右区间,再翻转整个序列即可完成对数组的构造,该方式是可逆的,也可以用来恢复旋转排序数组。

每次翻转如果不使用库函数,可以使用双指针算法自己写。

2.2 时间复杂度

  翻转操作需要遍历整个序列,时间复杂度为O(n)。

2.3 空间复杂度

  空间复杂度为O(1)。

3 源码

细节:

  1. 使用三步翻转法,找到中间位置,翻转左右区间,再翻转整个序列即可。
  2. 取size时候需要转成int型再计算,否则容易出错,因为size_t类型不能为负。
  3. 如果翻转不用reverse函数的话,需要对向双指针来实现reverse函数的功能。

C++版本:

/**
* @param s: An array of char
* @param offset: An integer
* @return: nothing
*/
void rotateString(vector<char> &s, int offset) {// write your code hereif (s.empty() || offset == 0){return;}int mid = (int)s.size() - offset % (int)s.size();reverse(s.begin(), s.begin() + mid); // 直接使用翻转函数reverse(s.begin() + mid, s.end());reverse(s.begin(), s.end());
}

62 旋转字符串(Rotate String)相关推荐

  1. leetcode 796. 旋转字符串(Rotate String)

    目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结 ...

  2. 【编程题目】左旋转字符串 ☆

    26.左旋转字符串(字符串) 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数. ...

  3. 程序员编程艺术(算法卷):第一章、左旋转字符串

    第一章.左旋转字符串 作者:July,yansha. 时间:二零一一年四月十四日. 说明:(狂想曲,有三层意思:1.思绪纷飞,行文杂乱无章,想到什么,记下什么.2.简单问题深入化,复杂问题精细化,不惧 ...

  4. LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)

    文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...

  5. 【旋转字符串的四种方法】

    目录: 前言 一.题目描述 二.题目解析 (一)依次左旋 (二)创建中间数组 (三)三次倒置 (四)接长数组 总结 前言 来源:力扣(LeetCode) 旋转字符串 一.题目描述 题目描述: 字符串的 ...

  6. 经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)

    题目 Assume you have a method isSubstring which checks if one word is a substring of another. Given tw ...

  7. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串

    反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...

  8. 判断一个字符串是另外字符串的旋转字符串

    题目 假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串. 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码.旋转 ...

  9. 微软算法100题26 左旋转字符串

    26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef 左旋转2 位得到字符串cdefab.请实现字符串左旋转的函数. 要求时间对长度 ...

最新文章

  1. centos 修改shm
  2. 对于C#里面的this与base
  3. Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识
  4. Linux实验三:Shell编程
  5. 【Vue.js源码解析 三】-- 模板编译和组件化
  6. comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
  7. 安鸾渗透实战平台--综合渗透--企业网站渗透流程
  8. 第一章:Python数据分析前的基础铺垫
  9. 如何翻转视频,一键将多个视频垂直翻转播放
  10. 简单系统U盘制作 / 安装系统
  11. 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】
  12. vue3使用watch失效的一个原因
  13. nmbd samba中文
  14. linux下删除以 - 开头的文件
  15. 自建低成本代码托管与文档管理平台经验分享
  16. hackthebox-Tracks-Beginner_Track-Lame
  17. SPSS调查问卷多重响应分析【011-3期】
  18. Edge浏览器无法登录同步共享问题
  19. 微信小程序云开发之微信支付
  20. 什么是js,以及js优缺点

热门文章

  1. HC-SR04超声波模块程序原理和Proteus ISIS仿真
  2. 8、哈希表(Hash)
  3. 蚂蚁养鸡线下支付扫码链接
  4. 定位职业赛道-抽象职业能力-修炼核心能力,打造核心竞争力,不单纯被岗位、公司、行业的选择局限
  5. html mp4无法播放,关于HTML5中Video标签无法播放mp4的解决办法
  6. 应聘web前端开发面试时问到的基础问题
  7. 图形图像的基础知识总结
  8. VR、AR、MR的区别与应用,以及对AR技术的一些实现原理
  9. 产品经理必须要懂的十种亚文化
  10. PCIE ARI技术