Skip to content

541. 反转字符串 II

js
;(function () {
  /**
   * 541. 反转字符串 II
   * 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
   * 如果剩余字符少于 k 个,则将剩余字符全部反转。
   * 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
   *
   * 输入:s = "abcdefg", k = 2
   * 输出:"bacdfeg"
   *
   * 输入:s = "abcd", k = 2
   * 输出:"bacd"
   *
   */

  function reverseStr(s: string, k: number): string {
    // 方法一:
    let splitArr: string[] = []
    for (let i = 0; i < s.length; i += 2 * k) {
      splitArr.push(s.slice(i, i + 2 * k))
    }
    splitArr = splitArr.map((item) => {
      let tempArr = Array.from(item) // 或 item.split('')
      // 反转 item 中的前 k 个字符
      for (let i = 0; i < Math.ceil(k / 2); i++) {
        let temp = tempArr[i]
        let rightK = tempArr[k - 1 - i]
        tempArr[i] = rightK
        tempArr[k - 1 - i] = temp
      }
      return tempArr.join('')
    })
    return splitArr.join('')

    // 方法二:
  }

  const s = 'abcdefg',
    k = 2
  console.log(reverseStr(s, k))
})()