给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例

输入: s = “abcdefg”, k = 2 输出: “bacdfeg”

题解

遍历字符串,每2k个字符遍历一次

反转0 - 2k 2k - 4k …. 的字符串

最后一次判断字符数进行反转

  1. /**
  2. * @param {string} s
  3. * @param {number} k
  4. * @return {string}
  5. */
  6. var reverseStr = function(s, k) {
  7. const arr = s.split('')
  8. for (let i = 0; i < arr.length; i += 2 * k) {
  9. let end = i + 2 * k - 1
  10. if (end > arr.length - 1) {
  11. end = arr.length - 1
  12. }
  13. reverse(arr, k, i, end)
  14. }
  15. return arr.join('')
  16. };
  17. function reverse(arr, k, start, end) {
  18. let mid = start + k - 1
  19. if (end - start + 1 < k) {
  20. mid = end
  21. }
  22. while (mid > start) {
  23. const m = arr[mid]
  24. const st = arr[start]
  25. arr[mid] = st
  26. arr[start] = m
  27. mid--
  28. start++
  29. }
  30. }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。