题目

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样

示例

  1. 输入: s = "abcdefg", k = 2
  2. 输出: "bacdfeg"

解析

Method Me

  1. var reverseStr = function (str, k) {
  2. const twoK = 2 * k
  3. const arr = str.split('')
  4. const brr = []
  5. for (let i = 0, iLen = arr.length; i < iLen; i += 4) {
  6. let tempArr = arr.slice(i, i + twoK)
  7. if (tempArr.length === twoK || tempArr.length >= k && tempArr.length < twoK) {
  8. brr.push(...tempArr.slice(0, k).reverse(), ...tempArr.slice(k))
  9. } else {
  10. brr.push(...tempArr.reverse())
  11. }
  12. }
  13. return brr.join('')
  14. }

Method
解题思路

  1. 将s分割为2k长度字符串并存入数组
  2. 遍历数组当item长度小于 k 个,全部反转,否则反转前k个字符串
    1. var reverseStr = function(s, k) {
    2. let arr = [];
    3. let i = 0;
    4. let str = "";
    5. while (i < s.length) {
    6. arr.push(s.slice(i, 2 * k + i));
    7. i = 2 * k + i;
    8. }
    9. arr.forEach((item) => {
    10. if (item.length <= 2 * k && item.length >= k) {
    11. str +=
    12. item.slice(0, k).split("").reverse().join("") +
    13. item.slice(k, item.length);
    14. } else {
    15. str += item.split("").reverse().join("");
    16. }
    17. });
    18. return str;
    19. };