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函数可以看这里。简单来说就是将字符串以空格进行分割(不加参数就不会保留任何空格),分割成只含单词的列表,倒排列表然后以一个空格对列表进行拼接,简单,大气!

就这样~加油加油!

发布了18 篇原创文章 · 获赞 1 · 访问量 797

猜你喜欢

转载自blog.csdn.net/shuaishuaihyh/article/details/105431266
今日推荐