JS leetcode II. 左旋转字符串 题解分析


风晓
风晓 2024-01-03 01:14:27 53046 赞同 0 反对 0
分类: 资源
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);
};

你看,这个substringsubstr还挺像,那这个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还是有很大差别。

那么关于本题就说到这了。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统 V10-SP1用户密码修改  563
统信桌面专业版【全盘安装UOS系统】介绍  447
银河麒麟桌面操作系统安装佳能打印机驱动方法  271
银河麒麟桌面操作系统备份用户数据  246
麒麟系统连接打印机常见问题及解决方法  143
最近下载排行榜
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统备份用户数据 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!