题目
给定一个字符串,逆序输出其中的单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词之间有多余的空格,将反转后它们之间的空格应该只有一个。
思路
我们可以使用双指针法来实现翻转单词。具体来说,我们先将字符串按照空格进行切分,并去除掉多余的空格。然后,利用两个指针 left 和 right 分别从字符数组的两端开始,依次对每个单词进行翻转。
根据上面的思路,我们可以写出下面的 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(' ');
}
复杂度分析
- 时间复杂度为 ,其中 表示字符串长度。
- 空间复杂度为 ,我们并没有使用额外的数组存储临时结果。