字符串第4/7题--翻转字符串里的单词

题目描述

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

示例 2:

输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:

输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:

  • 1 <= s.length <= 104
  • s 包含英文大小写字母、数字和空格 ' '
  • s 中 至少存在一个 单词

力扣链接

leetcode151

思路分析

这道题看上去非常简单,说实话我看到它的第一想法就是使用split()函数将字符串按空格拆分为单词列表,然后使用栈进行翻转处理,这是最容易想到的,但是如果这样做的话需要引入一个一个辅助空间-栈,这样的空间复杂度是O(n)。能不能不引入辅助空间来解决该题呢?

常规方法--内置函数解决:首先我们可以借助字符串本身的内置函数来进行处理。一开始调用strip()字符串内置函数来去除字符串首尾两侧存在的空格;然后使用[::-1]这个方法来实现整个字符串的反转;使用split()函数来分开字符串中的每个单词,然后反转每个单词,拼接反转后的单词。

双指针法:这个方法的用法非常广泛,出现频率非常高。在此,我们先采用split()方法进行单词切分。然后定义左指针和右指针,当left<right,  首尾值对调,完成之后指针进行加减变化。

代码分析

# 常规方法
class Solution:
    def reverseWords(self, s: str) -> str:
        # 这个函数可以实现删除字符串前后空白
        s = s.strip()
        # 这个方法可以实现反转整个字符串。s[::-1]代表s[start:end:step=-1],即步长等于-1,那么表示从后到前进行切片
        s = s[::-1]
        # 将字符串拆分为单词,并反转每个单词
        s = ' '.join(word[::-1] for word in s.split())
        return s 

# 使用双指针
class Solution:
    def reverseWords(self, s:str) -> str:
        # 将字符串拆分为单词, 即转换为列表类型
        words = s.split()

        # 反转单词
        left, right = 0, len(words) - 1
        while left < right:
            words[left], words[right] = words[right], words[left]
            left += 1
            right -= 1
        # 将列表转换为字符串
        return " ".join(words)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 05:00:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 05:00:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 05:00:05       87 阅读
  4. Python语言-面向对象

    2024-05-16 05:00:05       96 阅读

热门阅读

  1. [力扣题解]122. 买卖股票的最佳时机 II

    2024-05-16 05:00:05       38 阅读
  2. python.有关素数的合集

    2024-05-16 05:00:05       35 阅读
  3. c语言之文件打开模式

    2024-05-16 05:00:05       37 阅读
  4. git 命令之 - revert

    2024-05-16 05:00:05       118 阅读
  5. Rust中的链式调用方法

    2024-05-16 05:00:05       111 阅读
  6. ANSYS Maxwell16 引导

    2024-05-16 05:00:05       29 阅读