壹 ❀ 引

简单的题目简单做,本题来自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还是有很大差别。

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

JS leetcode II. 左旋转字符串 题解分析的更多相关文章

  1. 剑指 Offer 58 - II. 左旋转字符串 + 简单题

    剑指 Offer 58 - II. 左旋转字符串 Offer_58_2 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGar ...

  2. 【剑指offer】58 - II. 左旋转字符串

    剑指 Offer 58 - II. 左旋转字符串 知识点:字符串: 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串 ...

  3. 力扣题解-面试题58 - II. 左旋转字符串

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

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

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

  5. 《剑指offer》面试题58 - II. 左旋转字符串

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

  6. 剑指 Offer 58 - II. 左旋转字符串

    本题 题目链接 题目描述 我的题解 方法一:使用库函数 s.substring() 代码如下 public String reverseLeftWords(String s, int n) { ret ...

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

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

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

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

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

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

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

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

随机推荐

  1. [转帖]Redis 内存淘汰策略 (史上最全)

    1.前言 Redis内存淘汰策略,是被很多小伙伴忽略的知识盲区,注意,是盲区. 注意,Redis如果内存淘汰策略配置不合理,可能会导致Redis无法服务. 所以,使用此文,对Redis内存淘汰策略专门 ...

  2. [转帖]TiDB 配置参数修改与系统变量修改步骤

    https://tidb.net/blog/bda86911   注意事项1:tidb-test 为集群名称   注意事项2:参数修改前与修改后备份.tiup目录   注意事项3:通过 tiup cl ...

  3. [粘贴]TiDB Lightning 断点续传

    https://www.bookstack.cn/read/tidb-6.1-zh/tidb-lightning-tidb-lightning-checkpoints.md 大量的数据导入一般耗时数小 ...

  4. [转帖]关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行

    关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行 ...

  5. [转帖]sqlplus与shell互相传值的几种情况

    https://www.cnblogs.com/youngerger/p/9068888.html sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $c ...

  6. [转帖]一个Linux 内核 bug 导致的 TCP连接卡死

    https://plantegg.github.io/2022/10/10/Linux%20BUG%E5%86%85%E6%A0%B8%E5%AF%BC%E8%87%B4%E7%9A%84%20TCP ...

  7. [转帖]Python模块winRM

    https://www.jianshu.com/p/ac095497bad4 一.介绍 winRM服务是windows server下PowerShell的远程管理服务.Python脚本通过连接win ...

  8. [转帖]关于 AREX

    https://arextest.github.io/website/zh-Hans/docs/intro/ AREX 介绍​ 背景​ 对于一个初上线的简单服务,只需通过常规的自动化测试加上人工即可解 ...

  9. [转帖]Nginx四层负载均衡详解

    https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 202 ...

  10. [转帖] shell管道咋堵住了

    https://www.cnblogs.com/codelogs/p/16060378.html 背景# 起因是这样的,我们想开发一个小脚本,当cpu使用率过高时,使用jstack将java的线程栈保 ...