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

算法刷题-字符串-151.反转单词

题目

给一串字符串,里面有若干单词,以空格界定单词的结束,翻转其中的单词

输入:s = " hello world "
输出:“world hello”

需要注意的是,给定的字符串可能存在头空格、尾空格以及中间的空格数量不唯一的情况。

要点

因为有多余空格的存在,所以如果普通的处理遍历,需要创建一个新的string存放,并需要考虑去掉开头结尾以及中间重复空格的情况,需要注意多个条件
那么如果就在原始字符串上面修改的话,也还是要注意条件,这会就可以先去除多余空格,再翻转整个字符,再逐个翻转单词。

代码(O(1)版,在原始字符串上处理)

步骤就是先去掉所有多余空格,再反转整个字符串,再逐个单词内部进行反转到正确顺序

class Solution {
public:void removeEmpty(string &s) {int slow = 0, fast = 0;for (;fast < s.size(); fast++) {if (s[fast] != ' ') { //当fast遍历到字母开始操作if (slow > 0) s[slow++] = ' '; //当不是第一个单词的时候,手动添加一个空格while(s[fast] != ' ' && fast < s.size()) { //这里就是当fast遇到单词的时候,赋值给slow,直到这个单词结束s[slow++] = s[fast++];}}}s.resize(slow); //这里直接slow而不是slow+1是因为最后while还给slow++了}void reverseString(string &s, int head, int end) {while (head < end) {swap (s[head], s[end]);head++;end--;}}
//这个是实际运行的成员函数string reverseWords(string s) {removeEmpty(s); //去重空格,定义在上面 reverseString(s, 0, s.size()-1); //反转字符串,定义在上面//对逐个单词内部逐个反转for (int start = 0, end = 0; end <= s.size(); end++) { //注意这里end终止的条件为什么是<=size()//是因为需要有一个判断最后一个单词结束的标志,相当于一个空格一样,而这个s.size()就是这个标志if (s[end] == ' ' || end == s.size()) {reverseString(s, start, end-1);start = end + 1;}}return s;}
};

代码(O(N)版,需要注意的是判断条件

class Solution {
public:string reverseWords(string s) {string result = "";// auto it = s.end()-1;// string::iterator start1;// string::iterator end = s.end()-1;int count = 0;int pos = s.size()-1;int start = 0;while (pos >= 0) {if(s[pos] == ' ') { //当遇到' '开始处理,if(count != 0) { //如果count!=0,证明遇到的' '是一个单词的结尾标志,就进行如下处理start = pos + 1;result.append(s, start, count);result += " ";}count = 0; //反正遇到了' '就让count=0}else { //如果没遇到' ',就让count++count++;}pos--;}if (count > 0) { //这里当遍历完之后,因为开头可能没有' '用来标志第一个单词的结束,这里手动添加result.append(s, pos+1, count);} else { //要么就是开头有多余空格,上面的while循环里会多给它加个''就删除result.erase(result.size()-1,1); //删除空格}return result;}
};

相关文章:

算法刷题-字符串-151.反转单词

题目 给一串字符串&#xff0c;里面有若干单词&#xff0c;以空格界定单词的结束&#xff0c;翻转其中的单词 输入&#xff1a;s " hello world " 输出&#xff1a;“world hello” 需要注意的是&#xff0c;给定的字符串可能存在头空格、尾空格以及中间的空格数量…...

单片机裸机编程:状态机与其他高效编程框架

在单片机裸机编程中&#xff0c;状态机是一种非常强大的工具&#xff0c;能够有效管理复杂的逻辑和任务切换。除了状态机&#xff0c;还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法&#xff1a; 1. 状态机编程 状态机通过定义系统…...

图表控件Aspose.Diagram入门教程:使用 Python 将 VSDX 转换为 PDF

将VSDX转换为PDF可让用户轻松共享图表。PDF 文件保留原始文档的布局和设计。它们广泛用于演示文稿、报告和文档。在这篇博文中&#xff0c;我们将探讨如何在 Python 中将 VSDX 转换为 PDF。 本文涵盖以下主题&#xff1a; Python VSDX 到 PDF 转换器库使用 Python 将 VSDX 转…...

DPVS-1:编译安装DPVS (ubuntu22.04)

操作系统 rootubuntu22:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy rootubuntu22:~# 前置软件准备 apt install git apt install meson apt install gcc ap…...

即将发布书籍 - Yocto项目实战教程:高效定制嵌入式Linux系统

以下这本书《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》即将发布&#xff0c;现在请哪位大佬出山写一个序或者推荐&#xff0c;有兴趣的大佬&#xff0c;请联系我&#xff01; Git仓库地址&#xff1a; https://github.com/jerrysundev/Yocto-Project-Book.git …...

Git 常用指令及其说明

配置相关 # 配置全局用户名 git config --global user.name "YourUsername"# 配置全局邮箱 git config --global user.email "your.emailexample.com"说明&#xff1a;这两条命令用于设置 Git 全局的用户名和邮箱&#xff0c;在提交代码时&#xff0c;这些…...

nginx代理后502

直接访问 ​https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions正常 使用nginx代理后访问出现502 server {listen 9999;server_name 172.21.3.78;location ^~ /compatible-mode {proxy_pass https://dashscope.aliyuncs.com;}location / {proxy_pass…...

大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1)

大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1) 前言本篇摘要12. LangChain原理及其agent构建Gradio12.1 LangChain概念及优势分析12.1.1 概念12.1.2 标准化组件接口1. 示例:聊天模型2. 示例:检索器12.1.3 编排组件12.1.4 便于部署12.1.5 可观测性和评…...

【Unity】鱼群效果模拟

鱼群效果模拟 文章目录 鱼群效果模拟Boid算法实现方式version1_CPUversion2_GPUversion3_Multilaterationversion4_Bitonic_Sorting &#xff08;GPU友好&#xff09;version5_Skinning &#xff08;TODO&#xff09; 细节项优化项参考链接 Boid算法 Boid算法是一种模拟群体行…...

PHP入门基础学习五(函数1)

函数 一、概念 1、什么是函数? 函数:封装一段用于完成特定功能的代码 当使用一个函数时,只需关心函数的参数和返回值,就可以完成一个特定的功能 2、php中的函数 PHP 的真正威力源自于它的函数,PHP 中提供了超过 1000 个内建的函数。 php函数分为: 系统内部函数和自…...

微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)

API 跳转 1、wx.navigateTo &#xff08;1&#xff09;基本介绍 功能&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面&#xff0c;使用该方法跳转后可以通过返回按钮返回到原页面 使用场景&#xff1a;适用于需要保留当前页面状态&#xff0c;后续还需返回的情…...

Typora的Github主题美化

[!note] Typora的Github主题进行一些自己喜欢的修改&#xff0c;主要包括&#xff1a;字体、代码块、表格样式 美化前&#xff1a; 美化后&#xff1a; 一、字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体&#xff0c;于是一直想更换字体&#xff0c;奈何自己拖延症…...

2.3 变量

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 变量是用来存放某个值的数据&#xff0c;它可以表示一个数字、一个字符串、一个结构、一个类等。变量包含名称、类型和值。在代码中…...

Docker:Docker从入门到精通(一)- Docker简介

一、前言 通过本专栏的学习&#xff0c;我们将了解   1. 掌握Docker基础知识&#xff0c;能够理解Docker镜像与容器的概念   2. 完成Docker安装与启动   3. 掌握Docker镜像与容器相关命令   4. 掌握Tomcat Nginx 等软件的常用应用的安装   5. 掌握docker迁移与备份相…...

【复习】Redis

数据结构 Redis常见的数据结构 String&#xff1a;缓存对象Hash&#xff1a;缓存对象、购物车List&#xff1a;消息队列Set&#xff1a;点赞、共同关注ZSet&#xff1a;排序 Zset底层&#xff1f; Zset底层的数据结构是由压缩链表或跳表实现的 如果有序集合的元素 < 12…...

在Spring Boot+Vue前后端分离的项目中使用JWT实现基本的权限校验

说明 在 Spring Boot + Vue 前后端分离的项目中,如果不使用第三方服务(如 Spring Security、Shiro 等),可以通过自定义实现基本的权限校验。 使用JWT实现步骤 以下是实现步骤: 1. 设计权限模型 通常权限模型包括: 用户(User):系统的使用者。角色(Role):用户的权…...

蓝桥杯单片机组第十二届省赛第二批次

前言 第十二届省赛涉及知识点&#xff1a;NE555频率数据读取&#xff0c;NE555频率转换周期&#xff0c;PCF8591同时测量光敏电阻和电位器的电压、按键长短按判断。 本试题涉及模块较少&#xff0c;题目不难&#xff0c;基本上准备充分的都能完整的实现每一个功能&#xff0c;并…...

伪404兼容huawei生效显示404

根据上述思考&#xff0c;以下是详细的中文分步说明&#xff1a; --- **步骤 1&#xff1a;获取目标设备的User-Agent信息** 首先&#xff0c;我们需要收集目标设备的User-Agent字符串&#xff0c;包括&#xff1a; 1. **iPhone设备的User-Agent**&#xff1a; Mozi…...

UIAutomation开发常用方法的参考文档

简介 由于UIAutomation的官方文档只有一个github中的readme文件,只是简单的使用示例,具体使用还需要在代码中查找,非常不方便。经过我多年使用UIAutomation开发的经验和整理,把常用的功能梳理成本文档,作为我的开发参考使用,这样就不用每次都翻代码了,同时也可以使用AI…...

数据库面试题(基础常考!!!)

在数据库领域&#xff0c;无论是日常开发还是面试场景&#xff0c;都有一些高频且重要的问题需要我们深入理解和掌握。本文将对这些常见面试题进行详细阐述&#xff0c;帮助大家更好地应对面试和实际工作中的挑战。 面试题一&#xff1a;三范式详解 什么是三范式 三范式是关…...

【硬件】2026最适合做家用NAS的CPU是哪一款

家用NAS没有绝对“唯一最优”的CPU&#xff0c;核心是匹配你的预算、功能需求和功耗预期。结合2026年的市场现状、软件兼容性和实测表现&#xff0c;以下是分场景的精准推荐&#xff0c;覆盖99%的家用需求&#xff0c;同时附上核心选型原则和避坑指南。 核心选型黄金原则&#…...

从linspace到logspace:Matlab新手必须掌握的两种‘间距’生成函数对比指南

从linspace到logspace&#xff1a;Matlab新手必须掌握的两种‘间距’生成函数对比指南 刚接触Matlab的工程师或科研人员&#xff0c;常常会被各种数据生成函数弄得眼花缭乱。特别是在需要创建特定间隔的数值序列时&#xff0c;linspace和logspace这两个看似简单的函数&#xff…...

保姆级教学:Sambert多情感语音合成镜像部署与使用全攻略

保姆级教学&#xff1a;Sambert多情感语音合成镜像部署与使用全攻略 1. 准备工作&#xff1a;了解Sambert语音合成镜像 Sambert多情感中文语音合成镜像是一个开箱即用的语音生成解决方案&#xff0c;基于阿里达摩院研发的Sambert-HiFiGAN模型构建。这个镜像已经预先解决了常见…...

Chinese-Bert-Wwm-Ext 模型新手部署与调用指南

① 环境依赖安装与快速配置 开始之前&#xff0c;我们需要搭建一个干净且兼容的运行环境。Chinese-Bert-Wwm-Ext 模型基于 PyTorch 生态&#xff0c;因此核心依赖是 torch 和 transformers 库。在实际操作中&#xff0c;最稳妥的方式是使用 Conda 创建一个独立的虚拟环境&#…...

5分钟搞懂LTE/NR的PDCCH:手机是怎么知道基站让它干啥的?

解码移动通信的神经中枢&#xff1a;PDCCH如何成为基站与手机的"隐形传令官" 想象一下早高峰的地铁站——成千上万的乘客需要实时接收不同的乘车指令&#xff1a;有人要换乘3号线&#xff0c;有人需在下一站转乘机场快线&#xff0c;还有人应该原地等待下一班车。在4…...

mysql如何给已有数据表添加索引_使用CREATE INDEX提升查询速度

MySQL建索引需严格校验语法、字段与表名&#xff1b;优先用ALTER TABLE ADD INDEX&#xff1b;复合索引顺序须匹配查询条件&#xff1b;避免冗余索引&#xff1b;大表操作选低峰期&#xff1b;唯一索引承载约束语义&#xff1b;建索引后需ANALYZE TABLE更新统计信息。CREATE IN…...

[Sci Rep 2024]Spatial-temporal attention for video-based assessment of intraoperative surgical skill

论文网址&#xff1a;Spatial-temporal attention for video-based assessment of intraoperative surgical skill | Scientific Reports 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2.2. Introduction 2.2.1. Related work 2.3. Method 2.3.1. Supervised spatial at…...

新手必看:用C++写一个简单计算器,搞定信息学奥赛OpenJudge NOI 1.4 19题

从零开始用C实现计算器&#xff1a;信息学奥赛OpenJudge NOI 1.4 19题精解 第一次接触信息学奥赛的编程题目时&#xff0c;很多人会被"简单计算器"这样的基础题难住——明明知道加减乘除的数学规则&#xff0c;却不知道如何用代码表达。这道题考察的正是将日常数学思…...

Redis实战部署指南:从Windows桌面到Linux服务器的完整安装与验证

1. Redis入门&#xff1a;为什么你需要这份部署指南 Redis作为当下最流行的内存数据库之一&#xff0c;几乎成了高并发系统的标配。我第一次接触Redis是在一个电商秒杀项目中&#xff0c;当MySQL扛不住瞬时流量时&#xff0c;Redis轻松接住了每秒3万次的请求。这种性能表现让我…...

保姆级教程:在Orange Pi 5 Max上从零配置ROS+PX4无人机仿真环境(Ubuntu 20.04)

保姆级教程&#xff1a;在Orange Pi 5 Max上从零配置ROSPX4无人机仿真环境&#xff08;Ubuntu 20.04&#xff09; 1. 硬件准备与系统镜像烧录 Orange Pi 5 Max作为一款高性能ARM开发板&#xff0c;搭载瑞芯微RK3588八核处理器&#xff0c;16GB LPDDR5内存和Mali-G610 MP4 GPU&a…...