151.翻转字符串里的单词

1. 题目:

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

示例 1:
输入: "the sky is blue"
输出: "blue is sky the"

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

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

2. Python3代码解答:

class Solution:
    def reverseWords(self, s: str) -> str:
        # 将字符串拆分成单词,并将单词储存为列表words
        wrods = s.split()

        # 进行单词的反转,首先定义左右两个指针
        left, right = 0, len(wrods) - 1
        # 当左指针一直在右指针左边的时候
        while left < right:
            # 对左右指针指向的两个单词进行交换
            wrods[left],wrods[right] = wrods[right], wrods[left]
            # left右移,right左移
            left += 1
            right -= 1
        # 将交换之后的列表转化成字符串,这里使用空格 " " 作为分隔符来连接 words 列表中的所有元素
        # wrods是包含字符串元素的可迭代对象(如列表或元组),理解成需要进行连接成字符串的元组
        return " ".join(wrods)

3. 上述代码实现解析:

上述代码是一个Python类方法,实现反转一个字符串中的单词顺序,实现步骤可以分为以下几个部分:

  1. 拆分字符串:

    • words = s.split()
    • 使用 split() 方法将输入的字符串 s 按空白字符(如空格)拆分成单词,并将这些单词存储为列表 words。例如,如果输入是 "the sky is blue",那么 words 将会是 ['the', 'sky', 'is', 'blue']
  2. 反转单词列表:

    • 使用两个指针 leftright,分别初始化为列表的开始位置和结束位置。
    • 使用 while 循环,当 left 小于 right 时,交换 leftright 指向的元素,然后将 left 向右移动一位,right 向左移动一位。这样可以将列表中的单词顺序完全反转。例如,上面的例子将变为 ['blue', 'is', 'sky', 'the']
  3. 将列表转换回字符串:

    • return " ".join(words)
    • 使用 join() 方法,通过空格 " " 将列表 words 中的单词连接成一个新的字符串。因为 words 列表已经被反转,所以这个新字符串中的单词顺序也是反转的。
    • 继续上面的例子,最终返回的字符串将是 "blue is sky the"

上述方法将输入的字符串按单词进行反转,不改变单词内部的字符顺序,只改变单词之间的顺序。

4. 相关重点代码解释

在这段代码中,使用 s.split() 将字符串按空白字符拆分成单词后,每个元素(即列表中的每一项)代表一个完整的单词,而不是单个字母。因此,当使用两个指针 leftright 来交换元素时,实际上是在交换整个单词。

separator.join(iterable)

join() 方法是 Python 中的一个非常有用的字符串方法,它用于将序列中的元素连接成一个新的字符串。这个序列通常是一个列表或元组,其中的元素都必须是字符串。

这个方法的基本语法如下:

其中,separator 是你希望用来连接序列中元素的字符串,iterable 是包含字符串元素的可迭代对象(如列表或元组)。

使用例子

如果你有一个列表 ['apple', 'banana', 'cherry'] 并想用逗号 , 将它们连接起来,你可以这样做:

fruits = ['apple', 'banana', 'cherry']
result = ', '.join(fruits)
print(result)  # 输出: apple, banana, cherry

这里的 ', ' 是分隔符,它被放在列表中的每个元素之间。

在反转单词的代码中的作用

在你的原始代码中:

return " ".join(words)

这里的 " ".join(words) 使用一个空格 " " 作为分隔符来连接 words 列表中的所有元素。因为 words 列表中的每个元素是一个单词,所以当它们被连接成一个字符串时,单词之间会有一个空格,形成了一个正常阅读的句子结构。

注意事项

  • 使用 join() 方法时,序列中的所有元素都必须是字符串。如果序列中有非字符串类型的元素,比如整数或浮点数,那么在调用 join() 之前,你需要将它们转换成字符串。
  • join() 是一个非常高效的方法,通常比其他字符串连接方法(如使用 + 或字符串格式化)要快,特别是在连接大量的字符串时。这是因为 join() 在内部优化了内存分配和处理过程。

 综上,本文的对于力扣151. 反转字符串中的单词 的Python3解答,仅仅是个人学习资料记录,也十分高兴我的见解可以帮助其他的正在做这个题目的同学,基础较差,仅仅是个人见解,大神勿喷,欢迎交流,谢谢!

  • 40
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又在熬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值