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

LeetCode151:反转字符串中的单词

题目描述
给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例
输入:s = “the sky is blue”
输出:“blue is sky the”

示例 2:
输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:
输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

思想
先去除多余空格,然后反转整个字符串,再对每个字符串中的单词进行反转

代码

erase去除多余空格的代码
erase的时间复杂度为O(n),所以下面的操作的时间复杂度就是O(n^2).

  void removeExtrSpace(string& s) {for (int i = s.size() - 1; i > 0; i--) {if (s[i - 1] == s[i]&& s[i]==' ')s.erase(s.begin() + i);}if (s.size()>0 && s[s.size() - 1] == ' ')s.erase(s.begin() + s.size()-1);if (s.size() > 0 && s[0] == ' ')s.erase(s.begin());}

双指针去除多余的空格

    //双指针去除多余的空格void removeExtrSpace2(string& s) {int slow = 0;for (int fast = 0; fast < s.size(); fast++) {if (s[fast] != ' ') {//手动控制空格,给单词之间添加空格。slow != 0说明不是第一个单词,需要在单词前添加空格。if (slow != 0) s[slow++] = ' ';while (fast < s.size() && s[fast] != ' ') {s[slow++] = s[fast++];}}}s.resize(slow);}

整体代码

class Solution {
public://双指针去除多余的空格void removeExtrSpace2(string& s) {int slow = 0;for (int fast = 0; fast < s.size(); fast++) {if (s[fast] != ' ') {//手动控制空格,给单词之间添加空格。slow != 0说明不是第一个单词,需要在单词前添加空格。if (slow != 0) s[slow++] = ' ';while (fast < s.size() && s[fast] != ' ') {s[slow++] = s[fast++];}}}s.resize(slow);}string reverseWords(string s) {removeExtrSpace2(s);//将整个字符串反转reverse(s.begin(), s.end());int start = 0;//反转每个单词for (int i = 0; i < s.size(); i++) {if (s[i] == ' ') {reverse(s.begin()+start, s.begin() + i);start = i + 1;}}reverse(s.begin() + start, s.end());return s;} };
http://www.lryc.cn/news/321770.html

相关文章:

  • Linux入门-常见指令及权限理解
  • 找工作的经验总结一——渠道与简历
  • 第 126 场 LeetCode 双周赛题解
  • 固态浸压计
  • Ubuntu上搭建TFTP服务
  • SpringBoot3框架,事件和监听器、SPI
  • sadtalker-api/
  • vue+elementUI实现指定列的单元格可编辑
  • RK3568平台开发系列讲解(基础篇)内核是如何发送事件到用户空间
  • 力扣---打家劫舍---动态规划
  • mac安装rust环境
  • 1058:求一元二次方程
  • GraphQL入门之一对多关联查询
  • MATLAB和Python数值和符号计算可视化物理学气体动能和粒子速度
  • 阿里云-零基础入门NLP【基于机器学习的文本分类】
  • 蓝桥杯模块综合——高质量讲解AT24C02,BS18B20,BS1302,AD/DA(PCF8591),超声波模块
  • 前端跨平台开发框架:简化多端开发的利器
  • cesium.js加载模型后,重新设置旋转角度属性值
  • ②免费AI软件开发工具测评:通义灵码 VS 码上飞
  • 幻兽帕鲁游戏搭建(docker)
  • unity报错出现Asset database transaction committed twice!
  • 去除项目git的控制 端口号的关闭
  • 交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型
  • 简单的Charles抓包教程
  • 如何构建Docker自定义镜像
  • 一起学数据分析_2
  • 请解释Redis是什么?它有哪些主要应用场景?Redis支持哪些数据类型?并描述每种数据类型的特性和使用场景。
  • 在centos8中部署Tomcat和Jenkins
  • 机器学习模型—K means
  • QT UI设计