2020-10-17 反轉(zhuǎn)字符串中的單詞3

題目描述

給定一個(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%的用戶
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容