62 旋转字符串(Rotate String)
文章目录
- 1 题目
- 2 解决方案
- 2.1 思路
- 2.2 时间复杂度
- 2.3 空间复杂度
- 3 源码
1 题目
题目:旋转字符串(Rotate String)
描述:给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
- offset >= 0
- str的长度 >= 0
- 原地旋转意味着需要在函数中更改字符串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 源码
细节:
- 使用三步翻转法,找到中间位置,翻转左右区间,再翻转整个序列即可。
- 取size时候需要转成int型再计算,否则容易出错,因为size_t类型不能为负。
- 如果翻转不用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)相关推荐
- leetcode 796. 旋转字符串(Rotate String)
目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结 ...
- 【编程题目】左旋转字符串 ☆
26.左旋转字符串(字符串) 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数. ...
- 程序员编程艺术(算法卷):第一章、左旋转字符串
第一章.左旋转字符串 作者:July,yansha. 时间:二零一一年四月十四日. 说明:(狂想曲,有三层意思:1.思绪纷飞,行文杂乱无章,想到什么,记下什么.2.简单问题深入化,复杂问题精细化,不惧 ...
- LeetCode 03: T58. 最后一个单词的长度(简单); 剑指 Offer 05. 替换空格(简单); 剑指 Offer 58 - II. 左旋转字符串(简单)
文章目录 T7: 58. 最后一个单词的长度(简单) 思路 解法: 双指针 T8: 剑指 Offer 05. 替换空格(简单) 思路 解法: replace T9: 剑指 Offer 58 - II. ...
- 【旋转字符串的四种方法】
目录: 前言 一.题目描述 二.题目解析 (一)依次左旋 (二)创建中间数组 (三)三次倒置 (四)接长数组 总结 前言 来源:力扣(LeetCode) 旋转字符串 一.题目描述 题目描述: 字符串的 ...
- 经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)
题目 Assume you have a method isSubstring which checks if one word is a substring of another. Given tw ...
- 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...
- 判断一个字符串是另外字符串的旋转字符串
题目 假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串. 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码.旋转 ...
- 微软算法100题26 左旋转字符串
26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef 左旋转2 位得到字符串cdefab.请实现字符串左旋转的函数. 要求时间对长度 ...
最新文章
- centos 修改shm
- 对于C#里面的this与base
- Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识
- Linux实验三:Shell编程
- 【Vue.js源码解析 三】-- 模板编译和组件化
- comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
- 安鸾渗透实战平台--综合渗透--企业网站渗透流程
- 第一章:Python数据分析前的基础铺垫
- 如何翻转视频,一键将多个视频垂直翻转播放
- 简单系统U盘制作 / 安装系统
- 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】
- vue3使用watch失效的一个原因
- nmbd samba中文
- linux下删除以 - 开头的文件
- 自建低成本代码托管与文档管理平台经验分享
- hackthebox-Tracks-Beginner_Track-Lame
- SPSS调查问卷多重响应分析【011-3期】
- Edge浏览器无法登录同步共享问题
- 微信小程序云开发之微信支付
- 什么是js,以及js优缺点