数据结构与算法之数组: LeetCode 541. 反转字符串 II (Ts版)

反转字符串 II

描述

  • 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
    • 如果剩余字符少于 k 个,则将剩余字符全部反转。
    • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1

复制代码
输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2

复制代码
输入:s = "abcd", k = 2
输出:"bacd"

提示

  • 1 <= s.length <= 1 0 4 10^4 104
  • s 仅由小写英文组成
  • 1 <= k <= 1 0 4 10^4 104

Typescript 版算法实现

1 ) 方案1:双指针

ts 复制代码
function reverseStr(s: string, k: number): string {
    const n = s.length;
    const arr: string[] = Array.from(s);
    
    for (let i = 0; i < n; i += 2 * k) {
        reverse(arr, i, Math.min(i + k, n) - 1);
    }
    
    return arr.join('');
}

const reverse = (arr: string[], left: number, right: number): void => {
    while (left < right) {
        const temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
};
相关推荐
算AI15 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
hyshhhh17 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
杉之18 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓18 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf18 小时前
图论----拓扑排序
算法·图论
我要昵称干什么18 小时前
基于S函数的simulink仿真
人工智能·算法
AndrewHZ19 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr
念九_ysl19 小时前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
守正出琦19 小时前
日期类的实现
数据结构·c++·算法
ChoSeitaku19 小时前
NO.63十六届蓝桥杯备战|基础算法-⼆分答案|木材加工|砍树|跳石头(C++)
c++·算法·蓝桥杯