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

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

示例 1:

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

示例 2:

输入: s = "Mr Ding"
输出:"rM gniD"

提示:

  • 1 <= s.length <= 5 * 104
  • s 包含可打印的 ASCII 字符。
  • s 不包含任何开头或结尾空格。
  • s 里 至少 有一个词。
  • s 中的所有单词都用一个空格隔开。

思路:基本思路就是遍历字符串,遇到空格说明一个单词结束,然后把这个单词逆序放入result中,注意最后一个单词后面没有空格,需要在最后处理一下。

代码(Python):

class Solution(object):
    def reverseWords(self, s):
        result = ''                             #保存结果
        t = ''                                  #保存每一个单词
        for i,word in enumerate(s):
            if word != ' ':
                t += word
            else:                               #遇到空格,把单词逆序放入result
                result += t[::-1]
                result += ' '                   #每个单词后面加个空格
                t = ''
        result += t[::-1]                       #处理最后一个单词
        return result

在Python中有很多好用的函数可以很简便的解决这道题。

class Solution(object):
    def reverseWords(self, s):
        return ' '.join(s.split(' ')[::-1])[::-1]

解释一下这段代码:

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

首先执行的是括号内的s.split(' ')[::-1]

s.split(' ')就是按空格切分字符串,这一步执行完之后字符串中的一个个单词就被划分出来了,也就是[Let's take LeetCode contest]

然后s.split(' ')[::-1]进行逆序,此时是以每个单词为单位,所以是将一个单词作为整体进行逆序,变成了[contest LeetCode take Let's]

然后执行' '.join(s.split(' ')[::-1])就是将所有的单词用空格连接起来,所以这一步执行完之后又变成了一个字符串,内容是contest LeetCode take Let's

最后执行' '.join(s.split(' ')[::-1])[::-1],这个操作是执行一个逆序,此时是对一个字符串整体进行逆序的操作,所以是以每个字符为单位,也就实现了对这个字符串整体的逆序,变成了s'teL ekat edoCteeL tsetnoc。很巧妙的做法。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值