541.反转字符串II
链接:541.反转字符串II
难度:Easy
标签:双指针、字符串
简介:给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前 k 个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
题解 1 - typescript
- 编辑时间:2021-08-20
- 执行用时:76ms
- 内存消耗:44.1MB
- 编程语言:typescript
- 解法介绍:转为数组逐个翻转。
function reverseStr(s: string, k: number): string {
  const arr = s.split('');
  for (let i = 0, n = s.length; i < n; i += 2 * k) reverse(i, Math.min(i + k - 1, n - 1));
  return arr.join('');
  function reverse(start: number, end: number) {
    while (start < end) {
      [arr[start], arr[end]] = [arr[end], arr[start]];
      end--;
      start++;
    }
  }
}
题解 2 - javascript
- 编辑时间:2020-04-07
- 执行用时:120ms
- 内存消耗:37.3MB
- 编程语言:javascript
- 解法介绍:解构翻转。
/**
 * @param {string} s
 * @param {number} k
 * @return {string}
 */
var reverseStr = function (s, k) {
  function reverse(s) {
    return [...s].reverse().join('');
  }
  if (s.length < k) return reverse(s);
  const reverseS = reverse(s.substr(0, k));
  if (s.length <= 2 * k) {
    return reverseS + s.substr(k);
  }
  return reverseS + s.substr(k, k) + reverseStr(s.substr(k * 2), k);
};