leetcode20200410每日一题-151.反转字符串里的单词

1.题目

在这里插入图片描述

2.题目意思

将字符串里的单词整体翻转,首尾空格不保留,中间空格只能留1。

3.代码

解法一:
class Solution:
    def reverseWords(self, s: str) -> str:
        s = list(s)
        n = len(s)

        def reverse(s, i, j):
            while i<j:
                s[i], s[j] = s[j], s[i] # 反转数组,包括内容也翻转了
                i += 1
                j -= 1
        
        def wordReverse(s):
            # 内容翻转回来
            i, j = 0, 0
            while i<n:
                while i < n and s[i] == " ":
                    # 找出第一个空格
                    i += 1
                # i是第一个单词的首字母
                j = i 
                while j <n and s[j]!=" ":
                    # 找到单词末尾
                    j += 1
                # j是第一个单词后面的空格
                reverse(s, i, j-1) # 翻转单词
                i = j
        
        def cleanSpace(s):
            # 清理多余空格
            i, j = 0, 0
            while j<n:
                # 找到第一个单词位置
                while j<n and s[j] == " ":
                    j += 1
                # 向前移动
                while j < n and s[j]!=" ":
                    s[i] = s[j]
                    i += 1
                    j += 1
                # 移动下一个单词
                while j <n and s[j]==" ":
                    j += 1
                if j<n:
                    s[i] = " "
                    i+=1
            return "".join(s[:i])
        reverse(s, 0, n-1)
        wordReverse(s)
        return cleanSpace(s)

思路:双指针~

具体步骤代码里面注释的很详细了,就是老老实实练习基本功,整体反转,单词反转回来,去空格三个步骤。

解法二
class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(s.split()[::-1])

思路:python的特性~

python就是优美~想练基本功就好好练解法一,基本功扎实就可以追求代码优美了,一行搞定多好看!split函数可以看这里。简单来说就是将字符串以空格进行分割(不加参数就不会保留任何空格),分割成只含单词的列表,倒排列表然后以一个空格对列表进行拼接,简单,大气!

就这样~加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值