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

Leetcode刷题 由浅入深之字符串——541. 反转字符串Ⅱ

目录

(一)反转字符串Ⅱ的C++实现

写法一(s.begin()遍历字符)

(二)复杂度分析

时间复杂度

空间复杂度

(三)总结


【题目链接】541. 反转字符串Ⅱ - 力扣(LeetCode)

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 104

  • s 仅由小写英文组成

  • 1 <= k <= 104

(一)反转字符串Ⅱ的C++实现

写法一(s.begin()遍历字符)

解题思路:

        本题的反转与上一题不同,【题目链接】344.反转字符串 - 力扣(LeetCode)Leetcode刷题 由浅入深之字符串——344. 反转字符串-CSDN博客这一题是将整个字符串逆序,本题是在字符串内部2k以内逆序。

        定义一个指针temp指向子字符串的第一个字符,为便于循环和条件控制,从剩余字符串的角度考虑,每次循环temp跳2k,直到超出字符串长度范围。根据题意,

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

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

        使用s.begin()表示字符串的第一个字符,通过加减整数代表字符串的第几个字符。使用reverse()函数对子字符串进行反转根据题目要求写出不同条件的处理办法即可。

class Solution {
public:string reverseStr(string s, int k) {int a = s.size();int temp = 0;while(temp < a){if(a-temp < k){reverse(s.begin()+temp, s.begin()+a);}else if(a-temp >= k && a-temp < 2*k){reverse(s.begin()+temp, s.begin()+temp+k);}else{reverse(s.begin()+temp, s.begin()+temp+k);}temp += 2*k;}return s; }
};

        思路理清楚之后,会发现可以将一些逻辑相同的部分合并起来,更简洁的代码如下,运行结果一致。

class Solution {
public:string reverseStr(string s, int k) {int a = s.size();int temp = 0;while(temp < a){/*if(a-temp < k)reverse(s.begin()+temp, s.begin()+a);else if(a-temp >= k && a-temp < 2*k)reverse(s.begin()+temp, s.begin()+temp+k);elsereverse(s.begin()+temp, s.begin()+temp+k);*/reverse(s.begin()+temp, s.begin()+min(temp+k, a));temp += 2*k;}return s; }
};

(二)复杂度分析

时间复杂度

O(n)

空间复杂度

O(1)

(三)总结

(1)s.begin()表示字符串的第一个字符,后面加减整数可以遍历字符串中的字符。

(2)reverse()函数可以对子字符串进行反转。

学习中,诚挚希望有心者指正和交流,经验或者方法都可。

相关文章:

  • 振动临近失效状态,怎么频谱会是梳子?
  • API请求参数有哪些?
  • Modbus RTU 详解 + FreeMODBUS移植(附项目源码)
  • 【算法】:滑动窗口
  • 常见图像融合算法(alpha和金字塔融合)
  • 使用智能表格做FMEDA
  • Mysql--基础知识点--91.1--慢查询日志
  • 日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)
  • RocketMQ 深度解析:架构设计与最佳实践
  • 学习黑客认识数字取证与事件响应(DFIR)
  • 修改docker为国内源
  • 【笔记】BCEWithLogitsLoss
  • NVME / DoCA 是什么?
  • 2025年 全新 AI 编程工具 Cursor 安装使用教程
  • 【RAG官方大神笔记】检索增强生成 (RAG):Python AI 教程的详细介绍
  • FastChat部署大模型
  • tauri-plugin-store 这个插件将数据存在本地电脑哪个位置
  • 如何把win10 wsl的安装目录从c盘迁移到d盘
  • postgresql 参数wal_level
  • 《算法导论(第4版)》阅读笔记:p14-p16
  • 价格周报|供需回归僵局,本周生猪均价与上周基本持平
  • 第三届“老山国际春茶节”活动在云南麻栗坡举办
  • 异域拾异|大脚怪的形状:一项神秘社会学研究
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电
  • 绿城约13.93亿元竞得西安浐灞国际港港务片区地块,区内土地楼面单价首次冲破万元
  • 农行原首席专家兼浙江省分行原行长冯建龙主动投案被查