linye's Blog

全端工程師心得分享

0%

[LeetCode]557. Reverse Words in a String III

Algorithm I 筆記撰寫計畫

敘述

這是 Algorithm I 的第四天第二個題目,總共有兩題。

  • 難度: Easy
  • 花費時間:
  • 題目

給你一個字串(s),把這個字串反轉之後回傳,字串裡的空格不用反轉。

點我開啟限制與範例

限制:

  • 1 <= s.length <= 5 * 104
  • s is a printable ascii character.
  • s 的前後不會有空格
  • s 一定會有至少一個字母
  • s 裡的所有空格都是單格空格

Example 1:

1
2
Input: s = "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"

Example 2:

1
2
Input: s = "God Ding"
Output: "doG gniD"

筆記

內建函式作法

使用到了 JS 內建函式:

  1. String.prototype.split(): 把字串按照你指定的 separator 分割,然後存在陣列裡。
  2. Array.prototype.reverse(): 把陣列反轉。
  3. Array.prototype.join(): 把陣列按照你指定的 Separator 合併,存成字串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let splitS = s.split(" ");
let reversedS = [];
for (let i =0 ; i in splitS; i ++){
reversedS.push(splitS[i].split("").reverse().join(""))
}

return reversedS.join(" ")
};

成績

內建函式 reverse() 寫法成績

點我開啟舊寫法/失敗寫法
  • 內建函式作法

這個做法寫的太複雜了,導致跑出來成績非常不理想

  1. 把字串以空格切分後放進陣列
  2. 遍歷陣列每個元素都做 reverse
  3. 組回字串
  4. 回傳字串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let reversedS ;
for (let ele of s.split(' ')){
ele = reverseWord(ele)
if (!reversedS){
reversedS = ele;
}else{
reversedS += ' ' + ele;
}
}

return reversedS
};

function reverseWord(word){
let s = word.split('');
let reversedWord = '';
for (let i = 0; i < Math.floor(s.length / 2); i++) {
temp = s[i];
s[i] = s[s.length - i - 1];
s[s.length - i - 1] = temp;
}
for (let i of s){
reversedWord += i;
}
return reversedWord;
}