给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
- 如果剩余字符少于 k 个,则将剩余字符全部反转。
- 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例
输入: s = “abcdefg”, k = 2 输出: “bacdfeg”
题解
遍历字符串,每2k个字符遍历一次
反转0 - 2k 2k - 4k …. 的字符串
最后一次判断字符数进行反转
/**
* @param {string} s
* @param {number} k
* @return {string}
*/
var reverseStr = function(s, k) {
const arr = s.split('')
for (let i = 0; i < arr.length; i += 2 * k) {
let end = i + 2 * k - 1
if (end > arr.length - 1) {
end = arr.length - 1
}
reverse(arr, k, i, end)
}
return arr.join('')
};
function reverse(arr, k, start, end) {
let mid = start + k - 1
if (end - start + 1 < k) {
mid = end
}
while (mid > start) {
const m = arr[mid]
const st = arr[start]
arr[mid] = st
arr[start] = m
mid--
start++
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。