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

文章目录

      • 151. 翻转字符串里的单词
        • 题目
        • 解题思路
        • 代码实现
          • 语言特性:代码实现
          • 双指针:代码实现
        • 实现结果
          • 语言特性:实现结果
          • 双指针:实现结果

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. 翻转字符串里的单词_第1张图片

代码实现

语言特性:代码实现
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. 翻转字符串里的单词_第2张图片

双指针:实现结果

LeetCode 151. 翻转字符串里的单词_第3张图片


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


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

你可能感兴趣的:(LeetCode,翻转字符串里的单词,leetcode,python,双指针,语言特性)