資料結構與演算法: 文字反轉

20.01.03

Photo by Chris Lawton on Unsplash

請完成一個 function:參數為 string,return 該字串的倒轉。

例: reverse(‘apple’) === ‘elppa’ reverse(‘hello’) === ‘olleh’ reverse(‘Greetings!’) === ‘!sgniteerG’

function reverse(str) {}

方法一、

1.要熟悉 JS 常用的 API,String.prototype.split(),將字串轉為陣列
2.知道 JS 有 Array.prototype.reverse(),將陣列倒轉
3.知道 JS 有 Array.prototype.join(),將陣列合併成一個字串

function reverse(str) {
  const arr = str.split("")
  const reversedStr = arr.reverse().join("")
  return reversedStr
}

以下是整理過後,更精簡的 code:

function reverse(str) {
  return str.split("").reverse().join("")
}

方法一可能會被面試官拒絕的部分是,reverse()這個方法太作弊了,就像排序直接用 Array.prototype.sort()一樣,直接 call out 是不行 der。

方法二、

思考邏輯

1.知道 es6 for...of 的語句,用於可迭代的物件上,可迭代物件包含陣列、字串、Map 物件、Set 物件等等。 2.知道字串相加後,會組成一個新字串。或是熟悉 es6 的Template literals

function reverse(str) {
  let reversed = ""
  for (let char of str) {
    reversed = `${char}${reversed}`
  }
  return reversed
}

除非有特殊的迴圈條件,否則多數 for 迴圈建議使用for...offorEach來完成,以避免使用傳統 for 迴圈(let count = 0 ; count < 10 ; count++)時,打錯字(ex:分號打成逗號)及不易閱讀之缺點。

方法三、

1.知道 es6 Array.prototype.reduce(),跟上 functional programming 的潮流

方法二其實已經相當不錯了,若面試官想知道其它更潮的作法,可使用 reduce()的特性,將字串相加起來。

function reverse(str) {
  let arr = str.split("")
  return arr.reduce((string, char) => `${char}${string}`, "")
}

更精簡的 code 如下:

function reverse(str) {
  return str.split("").reduce((string, char) => `${char}${string}`, "")
}

以下是本章節的程式碼: