题目描述
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序.
题目分析
- 反转每个单词
- 保留顺序和空格
参数说明
/**
* @param {string} s
* @return {string}
*/
题解及实现
1. 使用内置方法
先将字符串用空格 split 开,逐一用 reverse 函数反转再拼接
var reverseWords = function (s) {
return s
.split(" ")
.map((item) => item.split("").reverse().join(""))
.join(" ");
};
时间复杂度:与算法内部实现有关
- 资源使用情况
- 执行用时:92 ms, 在所有 JavaScript 提交中击败了 82.98%的用户
- 内存消耗:44.1 MB, 在所有 JavaScript 提交中击败了 15.24%的用户
2. 双指针逐一反转
手工实现 reverse 函数功能,用两个指针指向字符串开头,i 指针遍历字符串如果遇到空格,将索引 i-1 到索引 j(初始化为 0)的字符 push 进临时数组,更新 j 为 i+1,重复上过程直到,i===s.length-1
var reverseWords = function (s) {
let i = (j = k = 0);
let temp = [];
while (i < s.length) {
if (s[i] === " " || i === s.length - 1) {
k = i === s.length - 1 ? i : i - 1;
for (; k >= j; --k) temp.push(s[k]);
if (i !== s.length - 1) temp.push(" ");
j = i++ + 1;
} else i++;
}
return temp.join("");
};
时间复杂度:O(n)
- 资源使用情况
- 执行用时:100 ms, 在所有 JavaScript 提交中击败了 56.05%的用户
- 内存消耗:48 MB, 在所有 JavaScript 提交中击败了 5.01%的用户