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

【算法-字符串1】反转字符串 + 反转字符串2

今天,带来字符串相关算法的讲解。文中不足错漏之处望请斧正!

理论基础点这里


1. 反转字符串

题意转化

将字符串的顺序倒转。

解决思路(抽象)

这道题的反转可以直接调用一个库函数,但是这样做意义不大。

  • 能直接用库函数秒的题就自己写
  • 只有部分功能用库函数实现,并且对库函数了解了就可以调用库函数

解决思路:从两边向中间,两两交换字符。

编程实现(具体)

class Solution {
public:void reverseString(vector<char>& s) {int left = 0, right = s.size() - 1;while (left < right) swap(s[left++], s[right--]);}
};

2. 反转字符串2

题意转化

用变量计数到2k时,区间内如果:

  1. 够k个就反转[i, i + k]
    1. 每2k个字符,反转前k个
    2. k <= 剩余字符 < 2k,反转前k个
  2. 不够k个就把剩下都全部反转[i, end()]

解决思路(抽象)

直接按照转化的题意写出代码即可。

编程实现(具体)

暴力写法:

class Solution {
public:string reverseStr(string s, int k) {int count = 0, begin = 0;for (int i = 0; i < s.size(); ++i) {++count;if (count == 2 * k) {myReverse(begin, begin + k - 1, s); // 每次反转k个, 反转区间: [begin, begin + k - 1]begin = i + 1;count = 0;}}if (count < k) myReverse(begin, s.size() - 1, s);else if (count >= k && count < 2 * k) myReverse(begin, begin + k - 1, s);return s;}
private:void myReverse(int begin, int end, string &s) {while (begin < end) swap(s[begin++], s[end--]);}
};

简洁写法:

class Solution {
public:string reverseStr(string s, int k) {for (int i = 0; i < s.size(); i += 2 * k) { // i每次递增2k,相当于计数到2k// 够k个就反转if (i + k < s.size()) reverse(s.begin() + i, s.begin() + i + k);// 不够k个就全部反转else reverse(s.begin() + i, s.end());}return s;}
};

今天的分享就到这里了,感谢您能看到这里。

这里是培根的blog,期待与你共同进步!

相关文章:

  • 关于在x64系统下使用MSSQL导入导出工具读取Excel报错的一个坑
  • 掌握 AI 和 NLP:深入研究 Python — 情感分析、NER 等
  • EtherCAT 伺服控制功能块实现
  • 【学习记录】从0开始的Linux学习之旅——编译linux内核
  • 微信小程序开发学习——顺序、选择、循环、数学函数
  • 启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析
  • Java查询多条数据放入word模板 多个word文件处理成zip压缩包并在前端下载.zip文件
  • 局域网协议:VLAN技术介绍
  • 硬技能之上的软技巧(三)
  • 【前端学java】Java中的接口和枚举概念(7)
  • 力扣贪心——跳跃游戏I和II
  • Unity团结引擎使用总结
  • 构建 App 的方法
  • Go语言读取文件内容
  • 合理运用ChatGPT使用Python编写一个桌面便签应用
  • php的引用
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【面试系列】之二:关于js原型
  • CentOS6 编译安装 redis-3.2.3
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JavaScript创建对象的四种方式
  • miaov-React 最佳入门
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mongodb--安装和初步使用教程
  • Wamp集成环境 添加PHP的新版本
  • webpack4 一点通
  • 从重复到重用
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记录:CentOS7.2配置LNMP环境记录
  • 聚类分析——Kmeans
  • 老板让我十分钟上手nx-admin
  • 深入浅出webpack学习(1)--核心概念
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 鱼骨图 - 如何绘制?
  • 阿里云重庆大学大数据训练营落地分享
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #include
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma once
  • #WEB前端(HTML属性)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)STL算法之比较
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 事件模型教程(二)
  • .Net的C#语言取月份数值对应的MonthName值
  • @Bean有哪些属性
  • @Mapper作用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder