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,该函数将返 ...
随机推荐
- GoLang 指针初探
1. 内置类型和引用类型 Go 中内置类型包括数值类型,字符串类型和布尔类型.引用类型包括切片,映射,通道,接口和函数类型.其中,引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据 ...
- python · matplotlib | 如何绘制子图
代码: import matplotlib.pyplot as plt import matplotlib matplotlib.rc("font",family='MicroSo ...
- 【MicroPython】用 c 添加接口 -- 给 module 添加 function
[来源]https://www.eemaker.com/micropython-c-modfunc.html
- [转帖]【SQL Server】varchar和nvarchar的基本介绍及其区别
https://www.cnblogs.com/zhaoyl9/p/15243556.html varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 ...
- [转帖]k8s(1.28.2)部署ingress-nginx-controller(1.9.0)
1.部署ingress-nginx-controller 继在三台虚拟机部署k8s后,需要部署ingress-nginx-controller,才能使设置的ingress规则生效. 1.1下载yaml ...
- [转帖]Java 8 要过时了?从JDK8飞升到JDK17,一次性给你讲明白
https://blog.csdn.net/agonie201218/article/details/127916729?spm=1001.2101.3001.6650.2&utm_mediu ...
- [转帖]浅析TiDB二阶段提交
https://cloud.tencent.com/developer/article/1608073 关键内容说明: TiDB 对于每个事务,会涉及改动的所有key中,选择出一个作为当前事务的Pri ...
- [转帖]AMD Zen4 霄龙 9004 转战嵌入式:192 框框无敌!秒杀对手 80%
http://www.myzaker.com/article/64104f50b15ec02eb10eb659 其实,它就是把此前用于服务器.数据中心的霄龙 9004 系列的部分型号拿了过来,命名.规 ...
- TCP内核参数的简单验证
前言 春节假期时学习了下内核参数与nginx的调优 最近因为同事遇到问题一直没有解,自己利用晚上时间再次进行验证. 这里将几个参数的理解和验证结果简单总结一下. 希望能够在学习的过程中将问题解决掉. ...
- killall 以及 pkill 等命令
https://zhidao.baidu.com/question/1500084252693125099.html // 通过 killall 命令killall nginx// 通过 pkill ...