【LeetCode】541.反转字符串 II

欢迎来到李耶的频道【LeetCode面试题】。


反转字符串 II

🔗 LeetCode 原题链接

题目

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。

  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

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

    输入:s = "abcd", k = 2
    输出:"bacd"

提示:

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

解法一:分段模拟(推荐)

思路 :使用 for 循环以 2k 为步长遍历字符串,每次处理一个长度为 2k 的区间。对区间的前 k 个字符进行反转,末尾不足 k 的则全部反转。

javascript 复制代码
function reverseStr(s, k) {
  const arr = s.split('');
  const n = arr.length;

  for (let i = 0; i < n; i += 2 * k) {
    // 确定反转的右边界:i+k 与 n 取较小值
    let left = i;
    let right = Math.min(i + k - 1, n - 1);

    // 双指针反转
    while (left < right) {
      [arr[left], arr[right]] = [arr[right], arr[left]];
      left++;
      right--;
    }
  }

  return arr.join('');
}
  • 时间复杂度 / 空间复杂度:O(n) / O(n)
  • 优势:逻辑清晰,一次遍历即可完成,是面试中最推荐的写法

解法二:库函数法

思路 :同样以 2k 为步长遍历,借助语言内置的 reverse 方法简化代码。用 substring 取出目标片段,反转后拼回。

javascript 复制代码
function reverseStr(s, k) {
  let result = '';

  for (let i = 0; i < s.length; i += 2 * k) {
    // 前半段:反转前 k 个(或剩余全部)
    const part1 = s.substring(i, i + k);
    const reversed = part1.split('').reverse().join('');

    // 后半段:保持不变
    const part2 = s.substring(i + k, i + 2 * k);

    result += reversed + part2;
  }

  return result;
}
  • 时间复杂度 / 空间复杂度:O(n) / O(n)
  • 优势:代码简洁,利用库函数减少手动操作
  • 劣势:多次拼接字符串可能产生额外开销

解法对比

解法 时间 / 空间复杂度 优势 推荐指数
分段模拟 O(n) / O(n) 手动实现,面试加分 ⭐⭐⭐⭐⭐
库函数法 O(n) / O(n) 代码简洁,易于编写 ⭐⭐⭐⭐

扩展题

  1. 反转字符串:编写一个函数,将输入的字符串原地反转。
  2. 反转字符串中的单词 III:给定一个字符串,反转每个单词的字符顺序,同时保留空格和单词顺序。
  3. 反转字符串中的元音字母:编写一个函数,反转字符串中的元音字母。

"行远自迩,登高自卑。" ------ 《礼记·中庸》

关注李耶,每天一道面试题,一起卷起来 🔥

相关推荐
shylyly_1 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
AI科技星1 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
沐籽李2 小时前
HuDiff在抗体人源化项目中的工程化落地
人工智能·算法·aidd·抗体设计
依然范特东2 小时前
强化学习笔记6--IS、PPO、TD、DQN、Actor-Critic
笔记·算法
一次旅行4 小时前
RLHF全链路深度解析:Reward Model数学推导+PPO完整实战,对比GRPO轻量化方案
人工智能·算法·机器学习
Wang's Blog4 小时前
AI Agent白手起家29: Few Shot 提示词工程实战
人工智能·算法
June`4 小时前
warp shuffle指令
c++·人工智能·算法·cuda
geovindu4 小时前
go:Bit Operation Algorithm
开发语言·后端·算法·golang·位运算法
坏柠5 小时前
C语言进阶:从零实现一个可靠的环形缓冲区,吃透回绕、边界与并发
java·c语言·算法