JS leetcode II. 左旋转字符串 题解分析
壹 ❀ 引
简单的题目简单做,本题来自leetcode面试题58 - II. 左旋转字符串,题目描述如下:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
我们简单分析题目,来说说有哪些方式可以实现它。
贰 ❀ 轻松题解
其实在JS leetcode 旋转数组 题解分析一文中我们已经做过了类似的题目,只是之前旋转的是数组,这次换成了字符串。当然,数组那题由于k没有限制,相对上来说还麻烦一点,比如我们得考虑k正好是数组length倍数的情况。
本题已经明确给出k范围为[1,s.length),所以不存在字符串旋转了一整圈的情况,那么我们直接开始解题。
说在前面,JavaScript中没有任何API能修改原字符串,我们能做的也就是复制字符串重新组合。
贰 ❀ 壹 使用substr
先直接上代码:
/**
* @param {string} s
* @param {number} n
* @return {string}
*/
var reverseLeftWords = function (s, n) {
return s.substr(n) + s.substr(0, n);
};
我们简单复习下substr(start,length),它表示从start(下标)开始复制length个字符,如果不写length,则一直复制到结束。
let str = 'echo';
str.substr(0,1);//'e'
str.substr(0);//'echo'
str.substr(1,2);//'ch'
贰 ❀ 贰 使用substring
/**
* @param {string} s
* @param {number} n
* @return {string}
*/
var reverseLeftWords = function (s, n) {
return s.substring(n) + s.substring(0, n);
};
你看,这个substring与substr还挺像,那这个substring啥意思呢?substring(start,stop)表示从start(下标)开始复制到stop前一位的字符,注意,包含start元素但不包含stop。所以返回的字符长度为stop-start。
let str = 'echo';
str.substring(0,1);//'e'
str.substring(0);//'echo'
str.substring(1,2);//'c'
贰 ❀ 叁 使用slice
/**
* @param {string} s
* @param {number} n
* @return {string}
*/
var reverseLeftWords = function (s, n) {
return s.slice(n) + s.slice(0, n);
};
slice与substring方法神似,同样接受两个参数,第一位表示复制的起点,第二位表示复制的终点,但不包含终点下标的元素。
那它两有什么区别呢,真要说就是slice能操作字符以外还能操作数组,效果还是一样
let arr = [1,2,3,4];
arr.slice(0,1);//[1]
arr.slice(0);//[1,2,3,4]
arr.slice(1,2);//[2]
贰 ❀ 叁 转数组
/**
* @param {string} s
* @param {number} n
* @return {string}
*/
var reverseLeftWords = function (s, n) {
let arr = s.split("");
return arr.concat(arr.splice(0, n)).join("");
};
这里就是将字符串转成了数组,利用splice方法裁剪出需要旋转的元素,拼接后数组后面再还原成字符串。
需要注意的是splice会修改原数组,这与slice还是有很大差别。
那么关于本题就说到这了。
JS leetcode II. 左旋转字符串 题解分析的更多相关文章
- 剑指 Offer 58 - II. 左旋转字符串 + 简单题
剑指 Offer 58 - II. 左旋转字符串 Offer_58_2 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGar ...
- 【剑指offer】58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串 知识点:字符串: 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串 ...
- 力扣题解-面试题58 - II. 左旋转字符串
题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能. 比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转 ...
- 力扣:面试题58 - II. 左旋转字符串
菜鸡小白不禁感叹:C++真好用!!! 题目描述: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg& ...
- 《剑指offer》面试题58 - II. 左旋转字符串
问题描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两 ...
- 剑指 Offer 58 - II. 左旋转字符串
本题 题目链接 题目描述 我的题解 方法一:使用库函数 s.substring() 代码如下 public String reverseLeftWords(String s, int n) { ret ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- 代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串
基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
- leetcode题库练习_左旋转字符串
题目:左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"abcdefg"和数字2,该函数将返 ...
随机推荐
- 3. Oracle数据库异常关闭,导致错误3. Oracle数据库异常关闭,导致错误ERROR: ORA-01034: ORACLE ngt available; ORA-27101: shared memory realm does not exist
之前由于电脑没电,强制关机,导致Oracle数据库异常关闭,再次启动电脑登陆数据库时,发生以下错误: 当我尝试重新启动数据库时,发生错误: 经过查阅资料后得知:缺少INITXE.ORA文件,需要从下图 ...
- 【Freertos】任务切换分析
任务切换实现 xPortPendSVHandler: mrs r0, psp // 获取进入异常时的进程栈 isb ldr r3, =pxCurrentTCB // 加载线程控制块地址到r3 ldr ...
- SpringBoot - 阿里云OSS - 上传和删除
1,首先在 pom.xml 中加入maven依赖 <!-- 阿里云oss --> <dependency> <groupId>com.aliyun.oss</ ...
- .net core 3.0 获取 IServiceProvider 实例
.net core 3.0后,获取IServiceProvider需要绕点弯路 首先,新建一个类: public class MyServiceProviderFactory : IServicePr ...
- [转帖]jmeter之发送jdbc请求--06篇
1.setup线程组中新建一个JDBC Connection Configuration配置元件 2.设置配置信息 Database URL:jdbc:mysql://127.0.0.1:3306/v ...
- [转帖]overcommit_memory、overcommit_ratio、CommitLimit、Committed_AS概念
overcommit_memory.overcommit_ratio.CommitLimit.Committed_AS概念 overcommit_memory是一个内核对内存分配的一种策略. over ...
- [转帖]Windows磁盘性能压测(2)-Fio
http://www.manongjc.com/detail/59-qftscgqzitmxpaw.html 目录 一.腾讯云官网硬盘性能指标 二.使用fio测试硬盘性能指标 1. 测试工具相关 2. ...
- Go实现网络代理
使用 Go 语言开发网络代理服务可以通过以下步骤完成.这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例. 步骤 1. 安装 golan ...
- 在ECS中安装Docker在内部访问RDS数据库
Navicat连接阿里云RDS数据库入门 https://blog.csdn.net/fenxunkao0106/article/details/106594276 https://www.cnblo ...
- Python笔记四之协程
本文首发于公众号:Hunter后端 原文链接:Python笔记四之协程 协程是一种运行在单线程下的并发编程模型,它的特点是能够在一个线程内实现多个任务的并发操作,通过在执行任务时主动让出执行权,让其他 ...