左旋转字符串

力扣题目链接(opens new window)

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = "abcdefg", k = 2

输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6

输出: "umghlrlose"

限制:

1 <= k < s.length <= 10000

思路

和旋转字符串的思路类似,利用整体翻转来达到目的

具体如下:

代码

照着思路来写就可以

class Solution {
public:
//定义反转函数
void reverse(string& s, int start, int end){
for(int i = start, j = end; i < j; i++, j--){
swap(s[i], s[j]);
}
} string reverseLeftWords(string s, int n) {
//1、反转0到k范围内的字符
for(int i = 0; i < s.size(); ++i){
if(i == n){
reverse(s, 0, i - 1);
break;
}
}
//2、将字符串整体反转
reverse(s, 0, s.size() - 1);
//3、将除了移动到末尾的部分进行反转,恢复正常顺序
reverse(s, 0, s.size() - n - 1); return s; }
};
注意点
1、明确你反转的到底是哪个字符

这点很重要,包括在之前的题目中也要注意

举个例子

string s = "abcd";
i = 2
reverse(s, 0, i);

这里反转的结果是什么?

是你所期望的 "bacd" 吗?

肯定不是,此时运行的结果是 "cbad"

也就是说,当要进行反转操作时,要考虑需不需要连同当前指针指向的字符一块反转(一般是不需要)

如果不需要,记得对反转区间的**右边界减1

2、不要漏了引用符号

定义反转函数时如果漏了'&',那么s是不会被进行任何操作的

是void reverse(string& s, int start, int end)而不是void reverse(string s, int start, int end)

【LeetCode字符串#04】左旋转字符串,以及反转函数使用说明的更多相关文章

  1. 代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串

    基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...

  2. 笔试算法题(13):反转链表 & 左旋转字符串

    出题:反转链表(递归和非递归解法): 分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL: 解题: struct Node { int v; Nod ...

  3. 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串

    第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...

  4. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  5. 反转单词顺序 VS 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标垫符号和普通字母一样处理.例如输入字符串“I am a student.”,则输出“student. a am I ...

  6. leetcode题库练习_左旋转字符串

    题目:左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返 ...

  7. 【面试题042】翻转单词顺序VS左旋转字符串

    [面试题042]翻转单词顺序VS左旋转字符串 题目一:     输入一个英文句子,反转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.     例如输入字符串“I a ...

  8. 翻转单词顺序 VS 左旋转字符串

    全部内容来自<剑指offer>. 题目一: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字符一样处理.例如输入字符串“I am a stude ...

  9. 力扣:面试题58 - II. 左旋转字符串

    菜鸡小白不禁感叹:C++真好用!!! 题目描述: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg& ...

  10. 剑指Offer面试题:34.翻转单词顺序VS左旋转字符串

    一.题目一:翻转单词顺序 1.1 题目说明 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...

随机推荐

  1. [转帖]mvcc多版本并发控制的原理

      https://baijiahao.baidu.com/s?id=1751185558149315946 MVCC多版本并发控制的原理:通过undo_log多版本链条,加上开启事务时产生的read ...

  2. 【转帖】sqlserver 在高并发的select,update,insert的时候出现死锁的解决办法

    最近在使用过程中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁.通常我们知道如果两个事务同时对一个表进行插入或修改数据,会发生在请求对表的X锁时,已经被对方持有了.由于得不 ...

  3. CentOS上面阿里源的设置过程

    1. 移除已经有的yum仓库 #原因: 公司内部部分境外网站不能访问,会提示异常. rm -rf /etc/yum.repos.d/* 2. 使用阿里源进行处理. #主要有两个, 一个是base的一个 ...

  4. Redis数据倾斜与JD开源hotkey源码分析揭秘

    1 前言 之前旁边的小伙伴问我热点数据相关问题,在给他粗略地讲解一波redis数据倾斜的案例之后,自己也顺道回顾了一些关于热点数据处理的方法论,同时也想起去年所学习JD开源项目hotkey--专门用来 ...

  5. 去除 i 标签的倾斜样式;如何引入本地的阿里字体图标

    去除 i 标签的倾斜样式 i{ font-style:normal; } 如何引入本地的阿里字体图标 将代码下载下来 当然你将下载下载来的资源有用的放在静态资源中 然后在 main.js 引入: ma ...

  6. bug的分类

    bug的分类 语法上的问题: 在循环的时候, 1.一定要注意这个循环的对象是否是空对象:空对象就不需要进行循环了, 判断一下,空对象就不需要进行循环了: 2.在XXX.a属性的时候,要注意这个对象是否 ...

  7. 【K哥爬虫普法】辛苦钱被中间商抽走八成,还因此锒铛入狱

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  8. 西门子PLC高校作业以及创新项目

    抢答器 在主持人按下启动按钮,3秒内

  9. 设计模式学习-使用go实现命令模式

    命令模式 定义 优点 缺点 适用范围 代码实现 命令模式对比策略模式 参考 命令模式 定义 命令模式(Command):将一个请求封装成一个对象,从而是你可用不同的的请求对客户进行参数化:对请求排队或 ...

  10. 基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

    相关项目: Paddlenlp之UIE模型实战实体抽取任务[打车数据.快递单] Paddlenlp之UIE分类模型[以情感倾向分析新闻分类为例]含智能标注方案) 应用实践:分类模型大集成者[Paddl ...