字符串中的单词反转【leetcode】

本题选自leetcode图解算法数据结构一书

你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。

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

示例 1:

输入: message = "the sky is blue"
输出: "blue is sky the"
示例 2:

输入: message = "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:

输入: message = "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
 

提示:

1 <= message.length <= 10^4
message 中包含英文大小写字母、空格和数字
message 中至少有一个单词

法一:利用split依据空格对message进行划分

class Solution(object):def reverseMessage(self, message):""":type message: str:rtype: str"""m=message.split(' ')t=[]for i in m:tmp=i.replace(' ','')#判断去除空格后的长度,如果全是空格就没有了if len(tmp):t.append(i)t.reverse()return " ".join(t)

实际运行过程中,时间空间复杂度都不高

法二:双指针

注意点:

第一次写的时候,while循环里边没有加i>=0会导致第一个单词无法输出,因为少了这个条件会导致i<0在最后一次循环后小于0了,无法再次进入循环,导致少了一次

class Solution(object):def reverseMessage(self, message):""":type message: str:rtype: str"""message=message.strip()i=j=len(message)-1t=[]while i>=0:while message[i]!=' ' and i>=0:i-=1t.append(message[i+1:j+1])#注意[]的区间是左闭右开while message[i]==' ' and i>=0:i-=1j=ireturn " ".join(t)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可有效应对人手不足的线缆测径仪!

关键词&#xff1a;测径仪,线缆测径仪,电缆测径仪,在线测径仪,高线测径仪 线缆电缆&#xff0c;一般成卷出售&#xff0c;每卷线缆的品质都要有保障&#xff0c;加上其大长度连续叠加组合生产方式&#xff0c;对电线电缆生产的影响是全局性和控制性的&#xff0c;因此任意位置的…

java生成dll,并利用c语言使用libcurl调用http接口

本文可能需要使用的环境和工具&#xff1a; c/ c和GCC编译器 (Windows) Cygwin或MinGW 本文运行环境为windows10&#xff0c;使用MinGW-W64-builds-4.2.0 curl-8.5.0 libcurl 可以在官网 http://curl.haxx.se/ 获得。 配置MinGW 将mingw.rar解压到D:&#xff0c;修改系统…

操作系统基础:进程同步【中】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 1 进程同步&#xff08;中&#xff09;1.1 信号量机制1.1.1 总览1.1.2 什么是信号量机制1.1.2.1 什么是信号量1.1.2.2 什么是原语1.1.2.3 "一对原语" 指的是什么…

SD卡写保护无法格式化怎么办?

一般来说&#xff0c;写保护&#xff08;也称为只读&#xff09;是数据存储设备防止写入新数据或修改旧信息的能力。换句话说&#xff0c;您可以读取存储在磁盘上的信息&#xff0c;但是却不能删除、更改或复制它们&#xff0c;因为访问会被拒绝。那么SD卡有写保护怎么格式化呢…

【方法】RAR分卷压缩文件如何打开?

当RAR压缩文件比较大&#xff0c;不利于传输时&#xff0c;我们可以把文件压缩成分卷文件&#xff0c;那压缩后的分卷文件如何打开呢&#xff1f;今天就来说说RAR分卷压缩文件的两种打开方法。 方法一&#xff1a; 和普通压缩包一样&#xff0c;打开分卷压缩包也需要用到解压…

数据结构day7

1.思维导图 1.二叉树递归创建 2.二叉树先中后序遍历 3.二叉树计算节点 4.二叉树计算深度。 5.编程实现快速排序降序

git clone常见问题一览及解决方法

在使用Ubuntu下&#xff0c;终端运行git clone命令时会遇见许多问题&#xff0c;本文主要针对一些常见的问题进行整理。关于换源问题&#xff0c;推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述&#xff0c;ubuntu下个人使用发现体验良好&am…

c++的并发操作(多线程)和 while 优先级 已解决

C11标准在标准库中为多线程提供了组件&#xff0c;这意味着使用C编写与平台无关的多线程程序成为可能&#xff0c;而C程序的可移植性也得到了有力的保证。另外&#xff0c;并发编程可提高应用的性能&#xff0c;这对对性能锱铢必较的C程序员来说是值得关注的。 1. 何为并发 …

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。文件&…

编译opencv4.6问题汇总,第三方软件包见我发的资源

win10系统 python3.8.2&#xff0c;cmake-3.15.5-win64-x64&#xff0c;opencv4.6 编译方式见&#xff1a;OpenCV的编译 - 知乎 本文主要总结问题。赠人玫瑰手留余香。 问题1 Problem with installing OpenCV using Visual Studio and CMake (error code: MSB3073) 解决方法…

Qt+css绘制标题

之前学过html和小程序&#xff0c;帮老师做项目的时候也用过vue&#xff0c;在想qt绘制界面是不是也可以使用css,然后查了一些资料&#xff0c;绘制了一个标题&#xff0c;准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数&#xff0c;一个用于绘…

CAM350开短路检查操作

本质: 使用CAM350进行开短路检查,实际就是从Gerber文件中提取网表与从Allegro中产生的IPC-D-356A格式网表进行比较。 1.首先打开CAM350,导入网表: 2.设置各层的属性类型: (1)精度设置,这里需要和Allegro中出Gerber文件时设置的精度保持一致,坐标和零压缩设置保持默认…