当前位置: 首页 > news >正文

LeetCode541 反转字符串2

一、题目描述

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

  1. 如果剩余字符少于 k 个,则将剩余字符全部反转。
  2. 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

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

二、解题思路

我们可以采用分组处理的方式来解决这个问题。具体步骤如下:

  1. 以 2k 个字符为一组对字符串进行遍历。
  2. 对于每一组,反转前 k 个字符。
  3. 处理剩余字符,根据剩余字符的数量进行不同的处理:
    • 如果剩余字符少于 k 个,则将剩余字符全部反转。
    • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

三、代码实现

以下是使用 C 语言实现的代码:

#include <string.h>// 反转字符串中从 start 到 end 的字符
void reverse(char* s, int start, int end) {while (start < end) {char temp = s[start];s[start] = s[end];s[end] = temp;start++;end--;}
}char* reverseStr(char* s, int k) {int len = strlen(s);// 以 2k 为步长遍历字符串for (int i = 0; i < len; i += 2 * k) {// 反转前 k 个字符if (i + k <= len) {reverse(s, i, i + k - 1);} else {// 剩余字符少于 k 个,全部反转reverse(s, i, len - 1);}}return s;
}

代码解释

  1. reverse 函数:该函数用于反转字符串中从 start 到 end 的字符。通过交换首尾字符,逐步向中间靠拢,直到 start 大于等于 end
  2. reverseStr 函数
    • 首先,使用 strlen 函数获取字符串的长度。
    • 然后,以 2k 为步长遍历字符串。
    • 对于每一组,判断剩余字符的数量:
      • 如果剩余字符不少于 k 个,则反转前 k 个字符。
      • 如果剩余字符少于 k 个,则将剩余字符全部反转。

四、复杂度分析

  • 时间复杂度:O(n),其中n是字符串的长度。因为我们只需要遍历一次字符串,每个字符最多被访问和交换一次。
  • 空间复杂度:O(1),只使用了常数级的额外空间。

五、总结

通过分组处理和反转操作,我们可以高效地解决这个字符串反转问题。这种方法的时间复杂度较低,并且只需要常数级的额外空间。在实际应用中,我们可以根据具体需求对代码进行优化和扩展。

http://www.lryc.cn/news/537556.html

相关文章:

  • MAC 系统关闭屏幕/睡眠 后被唤醒 Wake Requests
  • 论文笔记:Multi-Head Mixture-of-Experts
  • vue和Django快速创建项目
  • Java LinkedList(单列集合)
  • 多线程基础面试题剖析
  • .NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例
  • EasyExcel提取excel文档
  • 第十五届蓝桥杯嵌入式省赛真题(满分)
  • ASP.NET Core Web应用(.NET9.0)读取数据库表记录并显示到页面
  • 【Sceneform-EQR】实现3D场景背景颜色的定制化(背景融合的方式、Filament材质定制)
  • LeetCode1706
  • 2517. 礼盒的最大甜蜜度(Maximum Tastiness of Candy Box)
  • Golang 的字符编码与 regexp
  • 利用ollama 与deepseek r1大模型搭建本地知识库
  • Java短信验证功能简单使用
  • CAS单点登录(第7版)21.可接受的使用政策
  • 53倍性能提升!TiDB 全局索引如何优化分区表查询?
  • Pythong 解决Pycharm 运行太慢
  • 库里存储的数据有大量回车时,该如何进行存取
  • 【devops】Github Actions Secrets | 如何在Github中设置CI的Secret供CI的yaml使用
  • 体验 DeepSeek-R1:解密 1.5B、7B、8B 版本的强大性能与应用
  • 一文说清楚什么是Token以及项目中使用Token延伸的问题
  • 大模型-Tool call、检索增强
  • 【算法】【区间和】acwing算法基础 802. 区间和 【有点复杂,但思路简单】
  • Ubuntu22.04通过Docker部署Jeecgboot
  • HTML4
  • STM32F10X 启动文件完整分析
  • typescript快速入门之安装与运行
  • React源码解读
  • 【DeepSeek-R1】 API申请(火山方舟联网版)