继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

LeetCode 151. 翻转字符串里的单词

大梦三千秋
关注TA
已关注
手记 173
粉丝 7
获赞 168

151. 翻转字符串里的单词


题目


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

示例 1:

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

示例 2:

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

示例 3:

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

说明:

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

解题思路


思路一:利用语言特性

python 语言中提供 split 切割,join 连接等方法,可以直接调用内置方法解决该问题。

具体的步骤:

  • 使用 spilt 将字符进行切割,得到字符串列表
  • 使用切片操作反转字符串列表
  • 使用 join 将反转后的字符串列表用空格拼接。

当用此方法编写代码完成后,可以考虑自己编写函数实现,或者换其他思路实现。

思路二:双指针

因为最终结果需要数组进行倒序后输出,所以在尾部进行双指针定义,倒序遍历数组。

题目中说明【无空格字符构成一个单词】。那么按照这个原则,确定单词边界,将单词添加到定义的列表中。

最终的步骤也是将单词列表拼接返回。

具体过程如下图:

图解

代码实现


语言特性:代码实现
class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join(s.split()[::-1])

双指针:代码实现
class Solution:
    def reverseWords(self, s: str) -> str:
		# 尾部定义指针
        p = len(s) - 1
		# 定义返回结果
        ans = []

        while p >= 0:
        	# 倒序遍历,这里先去除尾部空格
            while p >= 0 and s[p] == ' ':
                p -= 1
            # 重置指针
            q = p
            # 这一步防止开头存在空格,
            # 最终却把空格添加到返回结果中
            if q < 0:
                break
            # 确定单词边界
            while p >= 0 and s[p] != ' ':
                p -= 1
            # 将单词放到结果中
            ans.append(s[p + 1:q + 1])
		# 拼接返回结果
        return ' '.join(ans)

实现结果


语言特性:实现结果

语言特性 | 实现结果

双指针:实现结果

双指针 | 实现结果


以上就是使用语言特性,或者使用双指针的方法来解决《151. 翻转字符串里的单词》问题的主要内容。


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP