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

(第12天)【leetcode题解】151、反转字符串中的单词

目录

  • 151、反转字符串中的单词
    • 题目描述
    • 思路
    • 代码
    • 本题反思

151、反转字符串中的单词

题目描述

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

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

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

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

要求:空间复杂度为O(1);

思路

  1. 去除多余空格:收尾无空格,单词之间只有一个空格
  • 定义快慢指针,快指针负责寻找正确的元素,慢指针负责从头开始给字符串赋值。
  1. 反转字符串
  2. 反转单个单词

代码

class Solution {
public://原地反转字符串void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++,j--) {swap(s[i], s[j]);//交换操作}}//去除多余空格void removeExtraSpaces(string& s) {int slowIndex = 0, fastIndex = 0; // 定义快指针,慢指针// 去掉字符串前面的空格while (s.size() > 0 && fastIndex < s.size() && s[fastIndex] == ' ') {fastIndex++;}for (; fastIndex < s.size(); fastIndex++) {// 去掉字符串中间部分的冗余空格if (fastIndex - 1 > 0 && s[fastIndex] == ' ' && s[fastIndex - 1] == s[fastIndex]) {continue;} else {s[slowIndex++] = s[fastIndex];}}if (slowIndex - 1 > 0 && s[slowIndex - 1] == ' ') { // 去掉字符串末尾的空格s.resize(slowIndex - 1);} else {s.resize(slowIndex); // 重新设置字符串大小}
}//反转字符串中的单词string reverseWords(string s) {removeExtraSpaces(s);//去除多余空格reverse(s, 0, s.size() - 1);//原地反转所有字符//开始逐个反转单词int start = 0;//指向每一个单词的开头for (int i = 0; i <= s.size(); ++i) {if (i == s.size() || s[i] == ' ') {//到达空格或字符串尾部,说明一个单词结束,进行反转reverse(s, start, i - 1);start = i + 1;//把start指向下一个单词的开头}}return s;}
};

优化【去除多余空格函数】之后的代码

class Solution {
public://原地反转字符串void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++,j--) {swap(s[i], s[j]);//交换操作}}//去除空格void removeExtraSpaces(string& s) {int slow = 0;//慢指针辅助赋值操作for (int i = 0; i < s.size();i++) {if (s[i] != ' ') {//如果目前遍历到的字符不是空格,就进行处理if (slow != 0) s[slow++] = ' ';//给每个单词之间添加空格while (i < s.size() && s[i] != ' ') {s[slow++] = s[i++];}}}s.resize(slow);//slow的大小就是删除多余空格后字符串的大小
}//反转字符串中的单词string reverseWords(string s) {removeExtraSpaces(s);//去除多余空格reverse(s, 0, s.size() - 1);//原地反转所有字符//开始逐个反转单词int start = 0;//指向每一个单词的开头for (int i = 0; i <= s.size(); ++i) {if (i == s.size() || s[i] == ' ') {//到达空格或字符串尾部,说明一个单词结束,进行反转reverse(s, start, i - 1);start = i + 1;//把start指向下一个单词的开头}}return s;}
};

时间复杂度:O(n);
空间复杂度:O(1);原地修改字符串。

本题反思

  • 对于字符串的操作类似于数组,也是利用双指针查找正确元素然后进行覆盖操作达到修改字符串的目的。
  • 寻找正确字符的过程就是去除多余空格的过程。
  • 比起整体反转字符串,加入了在整体字符串中反转其中的单词,这需要额外添加条件判断。

相关文章:

(第12天)【leetcode题解】151、反转字符串中的单词

目录 151、反转字符串中的单词题目描述思路代码本题反思 151、反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 返回单词顺序颠倒且单词之间用单个…...

如何处理多模态数据噪声不均衡动态?天大等最新《低质量数据的多模态融合》综述

多模态融合致力于整合来自多种模态的信息&#xff0c;目的是实现更准确的预测。在包括自动驾驶和医疗诊断等广泛的场景中&#xff0c;多模态融合已取得显著进展。然而&#xff0c;在低质量数据环境下&#xff0c;多模态融合的可靠性大部分仍未被探索。本文综述了开放多模态融合…...

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

文章目录 前言NvDataInterfaceNvBlockNvM配置SWC配置RTE Mapping使用生成的接口操作NVM总结前言 NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断…...

【c++算法篇】双指针(下)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;算法笔记仓 朋友们大家好啊&#xff0c;本篇文章我们来到算法的双指针的第二部分 目录 1.有效三角形的个数2.查找总价格为目标值的两个商品3.三数之和4.四数之和5.双指针常见场景总结 1.有效三角形…...

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面&#xff0c;让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成&#xff0c;一键超清原图复制到剪辑板&#xff0c;分享给好友。适用于提高商家信誉度&#xff0c;产品销售额度。装逼娱乐&#xff0c;用微图乐。图…...

基于Springboot的点餐平台

基于SpringbootVue的点餐平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 菜品信息 菜品资讯 购物车 后台登录 用户管理 菜品分类管理 菜品信息管理 …...

C# 获取一个字符串中非数字部分?

方法一&#xff1a;使用正则表达式 使用正则表达式可以便捷地匹配并提取出字符串中所有非数字字符。与之前保留数字时的做法相反&#xff0c;这次我们将匹配数字并替换为空字符串&#xff0c;从而留下非数字部分。 using System; using System.Text.RegularExpressions;publi…...

今日总结2024/5/7

今日复习LIS二分优化的使用 P2782 友好城市 确定一边城市排序完后&#xff0c;另外一边满足坐标上升的最大数目即是桥的最大个数 为上升子序列模型 #include <iostream> #include <algorithm> #include <utility> #define x first #define y second cons…...

爬虫学习(3)豆瓣电影

代码 import requests import jsonif __name__ "__main__":url https://movie.douban.com/j/chart/top_list#post请求参数处理&#xff08;同get请求一致&#xff09;headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53…...

GNU Radio创建FFT、IFFT C++ OOT块

文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言 GNU Radio 自带的 FFT 模块使用起来不是很方便…...

125.两两交换链表中的节点(力扣)

题目描述 代码解决及思路 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), …...

APP精准推送广告是怎么做到的?

你有没有遇到这种情况&#xff0c;刚和家人聊起五一去哪玩&#xff0c;各种软件就刷到各地旅游景点。刚和朋友说到健身计划&#xff0c;转眼间网购平台就给你推荐各种健身用品&#xff0c;这些软件是如何知道我们的需求&#xff0c;难道我们的手机被监听了&#xff1f;从技术上…...

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…...

大型企业总分支多区域数据传输,效率为先还是安全为先?

大型企业为了业务拓展需要&#xff0c;会在全国乃至全球各地设立分公司和办事机构&#xff0c;以便更好地处理当地事务&#xff0c;并进行市场的开拓和客户维护&#xff0c;此时&#xff0c;企业内部就衍生出了新的业务需求&#xff0c;即多区域数据传输。 多区域很难准确定义&…...

C语言例题35、反向输出字符串(指针方式),例如:输入abcde,输出edcba

#include <stdio.h>void reverse(char *p) {int len 0;while (*p ! \0) { //取得字符串长度p;len;}while (len > 0) { //反向打印到终端printf("%c", *--p);len--;} }int main() {char s[255];printf("请输入一个字符串&#xff1a;");gets(s)…...

场景文本检测识别学习 day09(Swin Transformer论文精读)

Patch & Window 在Swin Transformer中&#xff0c;不同层级的窗口内部的补丁数量是固定的&#xff0c;补丁内部的像素数量也是固定的&#xff0c;如上图的红色框就是不同的窗口&#xff08;Window&#xff09;&#xff0c;窗口内部的灰色框就是补丁&#xff08;Patch&#…...

抖音小店个人店和个体店有什么不同?区别问题,新手必须了解!

哈喽~我是电商月月 新手开抖音小店入驻时会发现&#xff0c;选择入驻形式时有三个选择&#xff0c;个人店&#xff0c;个体店和企业店 其中&#xff0c;个人店和个体店只差了一个字&#xff0c;但个人店不需要营业执照&#xff0c;是不是入驻时选择个人店会更好一点呢&#x…...

动态规划入门和应用示例

文章目录 前言斐波那契数列爬楼梯总结优点&#xff1a;缺点&#xff1a; 前言 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的数学方法。它主要用于解决一类具有重叠子问题和最优子结构性质的问题。…...

【C语言】精品练习题

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目九&#xff1a; 题目十&#xff1a; 题目十一&#xff1a; 题目十二&#xff1a; 题目十…...

数据库(MySQL)—— DML语句

数据库&#xff08;MySQL&#xff09;—— DML语句 什么是DML语句添加数据给全部字段添加数据批量添加数据 修改数据删除数据 什么是DML语句 在MySQL中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;数据操纵语言&#xff09;语句主要用于对数据库中的数…...

保姆级教程:用kitti2bag把KITTI数据集转成ROS bag,新手避坑指南(附2011_09_26小数据集下载)

从KITTI到ROS Bag&#xff1a;零基础实战转换指南 第一次接触KITTI数据集和ROS时&#xff0c;我完全被那些复杂的文件结构和专业术语搞晕了。作为一个计算机视觉和机器人领域的经典数据集&#xff0c;KITTI包含了丰富的传感器数据&#xff0c;但直接使用这些原始数据对新手来说…...

深度解析SacreBLEU:构建机器翻译评估的标准化技术栈

深度解析SacreBLEU&#xff1a;构建机器翻译评估的标准化技术栈 【免费下载链接】sacrebleu Reference BLEU implementation that auto-downloads test sets and reports a version string to facilitate cross-lab comparisons 项目地址: https://gitcode.com/gh_mirrors/sa…...

智能车视觉巡线:从图像处理到PID控制的嵌入式实战解析

1. 项目概述&#xff1a;一场关于速度与精度的极限挑战十多年前&#xff0c;当飞思卡尔&#xff08;Freescale&#xff09;智能车竞赛还是校园里最硬核的科技赛事之一时&#xff0c;摄像头组的较量无疑是皇冠上的明珠。它不像光电组依赖地面反射&#xff0c;也不像电磁组追寻导…...

STM32定时器中断配置详解:从时钟树到回调函数,一次搞懂ARR和PSC怎么算

STM32定时器中断配置详解&#xff1a;从时钟树到回调函数&#xff0c;一次搞懂ARR和PSC怎么算 在嵌入式开发中&#xff0c;定时器是最基础也最强大的外设之一。很多开发者虽然能够通过复制代码让定时器工作&#xff0c;但对于如何精确控制定时周期、理解时钟信号的传递路径以及…...

Linux内核动态调试技术:pr_debug与dynamic_debug实战指南

1. 动态输出&#xff1a;内核调试的“可控探针”在Linux内核开发与调试的日常里&#xff0c;最让人头疼的莫过于“日志”问题。printk虽然直接&#xff0c;但一旦开启&#xff0c;信息洪流会瞬间淹没控制台&#xff0c;不仅影响性能&#xff0c;更让你在关键信息里大海捞针。更…...

如何实现Galgame与漫画的实时多语言翻译?MisakaTranslator技术解析

如何实现Galgame与漫画的实时多语言翻译&#xff1f;MisakaTranslator技术解析 【免费下载链接】MisakaTranslator 御坂翻译器—Galgame/文字游戏/漫画多语种实时机翻工具 项目地址: https://gitcode.com/gh_mirrors/mi/MisakaTranslator 御坂翻译器&#xff08;MisakaT…...

4步让旧款Mac焕发新生:OpenCore Legacy Patcher完全指南

4步让旧款Mac焕发新生&#xff1a;OpenCore Legacy Patcher完全指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方放弃支持的旧款Ma…...

LRC Maker终极指南:5分钟掌握专业级歌词制作技巧

LRC Maker终极指南&#xff1a;5分钟掌握专业级歌词制作技巧 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾经为喜爱的歌曲找不到完美同步的歌词而烦恼&am…...

你的STM32调试信息用对了吗?深入对比.axf文件与addr2line.exe的配合之道

STM32调试进阶&#xff1a;解密.axf文件与addr2line的黄金组合 调试嵌入式系统时&#xff0c;最令人沮丧的莫过于设备突然崩溃&#xff0c;而你却对问题源头一无所知。作为一名长期与STM32打交道的开发者&#xff0c;我经历过无数次这样的时刻&#xff0c;直到真正理解了调试信…...

从三维点胶机到桌面雕刻机:一个STM32+FPGA运动控制核心板的复用实战

从三维点胶机到桌面雕刻机&#xff1a;STM32FPGA运动控制核心板的复用实战 在工业自动化设备开发领域&#xff0c;运动控制器的复用性与平台化设计正成为工程师们关注的焦点。当我们完成一款基于STM32FPGA架构的运动控制核心板开发后&#xff0c;如何快速将其适配到不同应用场景…...