LeetCode 557. 反转字符串中的单词 III | Python

机器学习
• 阅读 1444

557. 反转字符串中的单词 III


题目


给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例:

输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

提示:

  • 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

解题思路


使用辅助列表

先看题目,给定字符串,其中字符串含有空格,要求反转被空格隔开的单词,但是保留空格和单词的初始顺序。

再看后面的提示,字符串每个单词只有单个空格分隔,字符串不会有其他额外的空格。

因为只有单个空格分隔,那么这里,我们可以考虑将给定的字符串按照空格进行分割,这里使用字符串的 split() 函数,具体的做法:

  • 按照空格对字符串进行分割;
  • 定义辅助列表,然后将分割部分的单词进行翻转,按照顺序添加到辅助列表中;
  • 最后将反转之后单词进行拼接,添加空格间隔。

具体代码实现如下:

class Solution:
    def reverseWords(self, s: str) -> str:
        # 按照空格进行切割
        s = s.split(' ')
        # 然后将切割后的每部分都进行翻转
        ans = []
        for part in s:
            part = part[::-1]
            ans.append(part)

        # 最后拼接
        return ' '.join(ans)

前面的方法使用字符串的 split() 方法,这里再说一种在不使用分割的方法如何实现:

  • 遍历字符串,定义变量 left, right 分别指向单词开始和结尾,定义辅助列表;
  • 移动 right,查找空格,当遇到空格时,开始逆序将单词添加到辅助列表中;
  • 然后遇到空格,也将空格添加到辅助列表,再次移动 right,重复前面的步骤,直至 right 到达字符串末尾。

具体的代码实现如下。

class Solution:
    def reverseWords(self, s: str) -> str:
        ans = []
        length = len(s)
        
        right = 0
        while right < length:
            left = right
            # 先寻得空格,然后对空格前面进行交换
            while right < length and s[right] != ' ':
                right += 1
            # 逆序添加到辅助列表中
            for i in range(right-1, left-1, -1):
                ans.append(s[i])
            # 遇到空格也将空格也添加到列表中,然后继续移动
            while right < length and s[right] == ' ':
                ans.append(' ')
                right += 1
        
        # 返回
        return ''.join(ans)

欢迎关注


公众号 【书所集录

点赞
收藏
评论区
推荐文章
DaLongggggg DaLongggggg
4年前
python百题大冲关-反转字符串中的字符
挑战介绍实现一个算法来实现反转字符数组的功能。反转的要求如下:将字符数组的字符进行反转,例如'b','','a','r'变成'r','a','','b'。将字符数组替换为反转后的数组。本次挑战中,你需要在reverse_chars.py文件中补充函数reverse的空缺部分。re
小白初学JavaScript,遇得到一个关于document.write输出的问题,求教
题目如下:统计在这些单词:“America”、“Greece”、“Britain”、“Canada”、“China”、“Egypt”中包含“a”或“A”的字符串的个数。下面是我写的代码:languageDocumentvarziMunewArray("America","Greece
Stella981 Stella981
3年前
Python 常用单词
Python常用单词(英文好的人自动忽略)单词发音翻译作用print普润特打印显示我们想要查看的内容input因普特输入获取用户输入的一些内容int印特整型将有引号的数字加工成没有引号的strstr字符串将内容加工成带引号的数据bo
Stella981 Stella981
3年前
Python实现字符串反转
将字符串s‘helloword’反转输出为‘drowolleh’,以下通过多种方法实现1、字符串切片法(常用)s'helloword'rs::1print(r)结果:drowolleh2、使用reducereduce() 函数会对参数序列中元素进行累积
Stella981 Stella981
3年前
20165305 苏振龙《Java程序设计》第六周学习总结
第八章知识点熟练掌握String类的常用方法。掌握String类的和StringBuffer类的不同,以及二者之间的联系。使用StringTokenizer,Scannner类分析字符串,获取字符串中被分隔符分隔的单词。掌握Date类和Calendar类获取时间和日期的用法。如果需要处理特别大的整数,使用BigInteger类。当需要
Wesley13 Wesley13
3年前
JS字符串反转
最开始的思路是,先把字符串分割,然后倒序拼接成一个新的字符串。于是有了方法一:varname"MycityisWH";varnameArrname.split('');varresult;varresultStr'';for(vari0,l
Stella981 Stella981
3年前
POJ2503(Babelfish)
思路:就是用一个字典树翻译单词的问题,我们用题目中给出的看不懂的那些单词建树,这样到每个单词的叶子结点中存放原来对应的单词就好。这样查询到某个单词时输出叶子结点存的就行,查不到就"en"呗。这题用hash也是可以的1include<iostream2include<cstdio3include<std
可莉 可莉
3年前
20165305 苏振龙《Java程序设计》第六周学习总结
第八章知识点熟练掌握String类的常用方法。掌握String类的和StringBuffer类的不同,以及二者之间的联系。使用StringTokenizer,Scannner类分析字符串,获取字符串中被分隔符分隔的单词。掌握Date类和Calendar类获取时间和日期的用法。如果需要处理特别大的整数,使用BigInteger类。当需要
Wesley13 Wesley13
3年前
Vim常用编辑命令记录
ge向后移动一个单词,光标停在单词尾部Ctrle,Ctrly滚动一行%跳转到相配对的括号c2w从当前光标往后删除2个单词,并进入插入模式cc修改一整行,仍保留原来的缩进S同cc
小万哥 小万哥
1年前
Python 中多态性的示例和类的继承多态性
单词"多态"意味着"多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。函数多态性一个示例是Python中的len()函数,它可以用于不同的对象。字符串对于字符串,len()返回字符的数量:示例pythonx"H
小万哥 小万哥
1年前
C# 字符串操作指南:长度、连接、插值、特殊字符和实用方法
字符串用于存储文本。一个字符串变量包含由双引号括起的字符集合示例:csharp//创建一个string类型的变量并赋予一个值stringgreeting"Hello";如果需要,一个字符串变量可以包含多个单词:示例:csharpstringgreeting