LeetCode热题(JS版) - 151. 反转字符串中的单词

110 阅读1分钟

题目

给定一个字符串,逆序输出其中的单词。

示例 1:

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

示例 2:

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

示例 3:

输入: "a good example"
输出: "example good a"
解释: 如果两个单词之间有多余的空格,将反转后它们之间的空格应该只有一个。

思路

我们可以使用双指针法来实现翻转单词。具体来说,我们先将字符串按照空格进行切分,并去除掉多余的空格。然后,利用两个指针 leftright 分别从字符数组的两端开始,依次对每个单词进行翻转。

根据上面的思路,我们可以写出下面的 TypeScript 代码:

function reverseWords(s: string): string {
  // 去除多余的空格
  const words = s.trim().split(/\s+/);
  // 翻转每个单词
  for (let left = 0, right = words.length - 1; left < right; left++, right--) {
    [words[left], words[right]] = [words[right], words[left]];
  }
  return words.join(' ');
}

image.png

复杂度分析

  • 时间复杂度为 O(n)O(n),其中 nn 表示字符串长度。
  • 空间复杂度为 O(n)O(n),我们并没有使用额外的数组存储临时结果。