2020-10-17 反转字符串中的单词3

题目描述

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序.

题目分析

  • 反转每个单词
  • 保留顺序和空格

参数说明

/**
 * @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%的用户

你可能感兴趣的:(2020-10-17 反转字符串中的单词3)