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

77 阅读1分钟

题目

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

示例 1:

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

示例 2:

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

 

限制:

  • 1 <= k < s.length <= 10000

解析

这题较为简单,使用字符串slice方法即可,

  1. 将字符串s切割成两部分 [0, n)[n, s.length),
  2. [0, n) 这部分字符串放到 [n, s.length)后,拼接返回结果

注意, 字符串的slice(start, end)方法, 切片范围不包含end位置的字符,所以slice[0, n)[0, s.length)

参考代码

  1. 字符串切片I
/**
 * @param {string} s
 * @param {number} n
 * @return {string}
 */
var reverseLeftWords = function(s, n) {
    // 将`[0, n)` 这部分字符串放到 `[n, s.length)`后,拼接返回结果
    return s.slice(n) + s.slice(0, n);
};
  1. 字符串切片II
/**
 * @param {string} s
 * @param {number} n
 * @return {string}
 */
var reverseLeftWords = function(s, n) {
    // 把字符串赋值一份拼接,如: s = abcdefg, doubleWords = "abcdefgabcdefg"
    const doubleWords = s + s;
    // 切片的起始位置
    const startIndex = n;
    // 切片的结束位置 = 起始位置 + s 的 长度
    const endIndex = n + s.length;
    // 返回最终的切片结果
    return doubleWords.slice(startIndex, endIndex);
};

原题链接

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