Leetcode:剑指Offer58-II.左旋转字符串

130 阅读1分钟

力扣题目链接

题意:

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

image.png

思路:

  • 本题的核心操作还是在反转字符串,但难点是找到反转字符串的区间

方法一:

/**
 * @param {string} s
 * @param {number} n
 * @return {string}
 */
var reverseLeftWords = function(s, n) {
    let strArr = Array.from(s)
    let length = strArr.length
    //先反转整个字符串
    reverse(strArr,0,length-1)
    //再反转前半部分字符串
    reverse(strArr,0,length-1-n)
    //再反转后半部分字符串
    reverse(strArr,length-n,length-1)
    return strArr.join('')

    
};

var reverse = function(strArr,start,end){
    let left = start
    let right = end
    while(left<right){
        [strArr[left],strArr[right]]=[strArr[right],strArr[left]]
        left++
        right--
    }
}

方法二:

var reverseLeftWords = function(s, n) {
  const length = s.length;
  let i = 0;
  while (i < length - n) {
  //字符串拼接
    s = s[length - 1] + s;
    i++;
  }
  return s.slice(0, length);
};