欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 09:08:53
...

151. 翻转字符串里的单词


题目来源:https://leetcode-cn.com/problems/reverse-words-in-a-string

题目


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

示例 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 将反转后的字符串列表用空格拼接。

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

思路二:双指针

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

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

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

具体过程如下图:

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

代码实现


语言特性:代码实现
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)

实现结果


语言特性:实现结果

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

双指针:实现结果

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


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


欢迎关注微信公众号《书所集录》