题目
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样
示例
输入: s = "abcdefg", k = 2输出: "bacdfeg"
解析
Method Me
var reverseStr = function (str, k) {const twoK = 2 * kconst arr = str.split('')const brr = []for (let i = 0, iLen = arr.length; i < iLen; i += 4) {let tempArr = arr.slice(i, i + twoK)if (tempArr.length === twoK || tempArr.length >= k && tempArr.length < twoK) {brr.push(...tempArr.slice(0, k).reverse(), ...tempArr.slice(k))} else {brr.push(...tempArr.reverse())}}return brr.join('')}
Method
解题思路
- 将s分割为2k长度字符串并存入数组
- 遍历数组当item长度小于 k 个,全部反转,否则反转前k个字符串
var reverseStr = function(s, k) {let arr = [];let i = 0;let str = "";while (i < s.length) {arr.push(s.slice(i, 2 * k + i));i = 2 * k + i;}arr.forEach((item) => {if (item.length <= 2 * k && item.length >= k) {str +=item.slice(0, k).split("").reverse().join("") +item.slice(k, item.length);} else {str += item.split("").reverse().join("");}});return str;};
