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

代码随想录刷题——字符串篇(四)

151.反转字符串中的单词

初始版本(空间复杂度更差):

# 反转函数
void revstr(string& s,int l,int r){while(l<r){swap(s[l],s[r]);l++;r--;}return ;}
string reverseWords(string s) {int l=0;int r=0;# 去除多余空格while(r<s.size()){while(r<s.size() && s[r]==' ') r++;if(r>=s.size()) break;s.erase(l,r-l);r=l;while(r<s.size() && s[r]!=' ') r++;if(r>=s.size()){break;}else{r++;l=r;}}while(s[0]==' ') s.erase(0,1);while(s[s.size()-1]==' ') s.erase(s.size()-1,1);# 整体反转字符串revstr(s,0,s.size()-1);l=0;r=0;# 反转每个单词,循环写的有点不优雅while(r<s.size()){while(r<s.size() && s[r]!=' ') r++;if(r>=s.size()){revstr(s,l,r-1);break;}else{revstr(s,l,r-1);r++;l=r;}}return s;}

示例版本(空间复杂度更好):

# 去除多余空格函数
void removeSpace(string& s){int l=0;for(int r=0;r<s.size();r++){if(s[r]!=' '){if(l!=0) s[l++]=' ';while(r<s.size() && s[r]!=' '){s[l++]=s[r++];}}}s.resize(l);}# 反转函数
void reverse(string& s,int l,int r){while(l<r){swap(s[l],s[r]);l++;r--;}}
string reverseWords(string s){# 先去除空格removeSpace(s);# 再反转整个字符串reverse(s,0,s.size()-1);# 每个单词反转int l=0;for(int r=0;r<=s.size();r++){if(r==s.size() || s[r]==' '){reverse(s,l,r-1);l=r+1;}}return s;}

其他:

(1)思路是分三步:

        a.去除空格

        b.反转字符串

        c.反转单词

(2)去除空格部分一开始使用s.erase()实现的,但是erase本身操作的时候就需要将后面的字符串拉到前面,本身时间复杂度就在O(1)到O(N)之间,因此用双指针法时间复杂度更低

(3)示例代码循环写确实的挺优雅,试图总结一些规律:

        a.双指针,主动动的指针放在外层循环,被动动的指针放在内层循环

        b.大循环内的判断通常有实际意义,一般关键节点用if,有长度的操作用while

        c.通常内侧循环要适用于三种情况,,这三种情况求并集考虑判断条件

http://www.dtcms.com/a/336111.html

相关文章:

  • 深度学习之优化器
  • 自然语言处理NLP---预训练模型与 BERT
  • Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
  • Git 入门指南:核心概念与常用命令全解析
  • 「数据获取」《中国文化文物与旅游统计年鉴》(1996-2024)(获取方式看绑定的资源)
  • 链式前向星、vector存图
  • Kafka_Broker_副本基本信息
  • 【FreeRTOS】信号量与互斥量
  • LeetCode热题100--104. 二叉树的最大深度--简单
  • 给纯小白的Python操作 PDF 笔记
  • 【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)
  • Baumer高防护相机如何通过YoloV8深度学习模型实现工作设备状态的检测识别(C#代码UI界面版)
  • Shell脚本-流程控制语句基本语法结构
  • Mutually aided uncertainty
  • 5G NR PDCCH之速率匹配
  • 【数据结构】堆和二叉树详解——上
  • 神经网络中的梯度概念
  • 【杂谈】-以质代量:谷歌主动学习范式重构AI训练逻辑
  • 把 AI 变成“气味翻译官”——基于微型电子鼻的低功耗 VOC 实时识别系统
  • 13、系统设计
  • 何为“低空经济”?
  • DeepSider:免费使用顶级大模型、全方位AI赋能的浏览器插件
  • gitee 流水线+docker-compose部署 nodejs服务+mysql+redis
  • Effective C++ 条款46:需要类型转换时请为模板定义非成员函数
  • tauri2项目WindowConfig配置中titleBarStyle样式区别,仅macOS有效
  • 如何在Windows系统中更改用户名(中文转英文全流程)
  • Deepseek一体机
  • 视觉图像界面设计【QT-creator高级编程 - 01】图像显如何保证跟随主窗口变化,且保留必要的设定窗口
  • MiracleVision-美图旗下AI视觉大模型
  • 2001-2024年中国冬小麦30米分辨率种植分布数据集