Leetcode 151, 557. 翻转字符串 (C++, python)(小白学习之路)

题目描述:

给定一个字符串,逐个翻转字符串中的每个单词。

 

示例 1:

输入: "the sky is blue"
输出: "blue is sky the"

示例 2:

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

示例 3:

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

 

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

 

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

 

这道题跟557题题意基本类似,所以可以使用差不多的方法解决,151是一道Medium题目,我乍一看就感觉这道题肯定可以用Python一行解决,果不其然,最初我的一行写法是这样的

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return " ".join(list(filter(lambda x: x!="", s.strip().split(" ")[::-1])))

为什么要用filter函数呢,因为一开始我只想到用split函数中用“ ”空格做分隔符,结果在碰到有多个空格出现的案例时会分隔出很多个空字符串,导致最后输出的结果也有多个空格,不符合题意,于是用filter把多余的空字符串过滤掉,输出的结果也正确,不过后来看了别人的题解后知道,如果不给split()加参数,默认会把空字符串给过滤掉,因此可以把这段代码简化成

return " ".join(s.split()[::-1])

自从会了python list的切片方法后,基本就没用reverse函数了 ,这里稍微提醒一下自己reverse函数和reversed函数有区别。

C++方法的思路大致是两种:1.顺序遍历,把遍历到的每个单词入栈,然后一个一个出栈,同时加上“ ”;

2.逆序遍历,把遍历到的每一个单词再逆序,输出结果。

这里我自己还没写C++代码,下次二刷时就提醒自己不用python而用C++来写

你可能感兴趣的:(LeeTCode)