題目描述
給定一個(gè)字符串,你需要反轉(zhuǎn)字符串中每個(gè)單詞的字符順序,同時(shí)仍保留空格和單詞的初始順序.
題目分析
- 反轉(zhuǎn)每個(gè)單詞
- 保留順序和空格
參數(shù)說明
/**
* @param {string} s
* @return {string}
*/
題解及實(shí)現(xiàn)
1. 使用內(nèi)置方法
先將字符串用空格 split 開,逐一用 reverse 函數(shù)反轉(zhuǎn)再拼接
var reverseWords = function (s) {
return s
.split(" ")
.map((item) => item.split("").reverse().join(""))
.join(" ");
};
時(shí)間復(fù)雜度:與算法內(nèi)部實(shí)現(xiàn)有關(guān)
- 資源使用情況
- 執(zhí)行用時(shí):92 ms, 在所有 JavaScript 提交中擊敗了 82.98%的用戶
- 內(nèi)存消耗:44.1 MB, 在所有 JavaScript 提交中擊敗了 15.24%的用戶
2. 雙指針逐一反轉(zhuǎn)
手工實(shí)現(xiàn) reverse 函數(shù)功能,用兩個(gè)指針指向字符串開頭,i 指針遍歷字符串如果遇到空格,將索引 i-1 到索引 j(初始化為 0)的字符 push 進(jìn)臨時(shí)數(shù)組,更新 j 為 i+1,重復(fù)上過程直到,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("");
};
時(shí)間復(fù)雜度:O(n)
- 資源使用情況
- 執(zhí)行用時(shí):100 ms, 在所有 JavaScript 提交中擊敗了 56.05%的用戶
- 內(nèi)存消耗:48 MB, 在所有 JavaScript 提交中擊敗了 5.01%的用戶