【前端算法每日一题】leetcode-剑指 Offer 58 - I. 翻转单词顺序

114 阅读1分钟

题目描述

  • 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
  • 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。

解体思路

  • 因为句子开头,中间,结尾都会出现空格,而且空格个数未知
  • 所以遍历字符串的时候每次遇到空格就判断单词word是否有值,有的话前插入数组
  • 没遇到空格的话,拼接单词word
  • 结束遍历后,判断单词word是否有值,有的话前插入数组(这个容易被忽略)进行这个操作是因为字符串结尾若没有空格的话,最后一个单词没有插入到数组中

解题代码(JavaScript)

var reverseWords = function (s) {
  let word = "";
  let wordArr = [];
  for (let i = 0; i < s.length; i++) {
    if (s[i] === " ") {
      if (word) wordArr.unshift(word);
      word = "";
    } else {
      word += s[i];
    }
  }
  if (word) wordArr.unshift(word);
  return wordArr.join(" ");
};

更简洁的解题代码(JavaScript)

// 个人不太建议用这种写法,虽然也是一种解题思路,但是都是用的api
// 这种写法需要注意的是单词之间的空格不一定是一个,有可能会是多个,所以使用了filter过滤
var reverseWords = function (s) {
  return s
    .trim()
    .split(" ")
    .filter((item) => item.trim())
    .reverse()
    .join(" ");
};