Photo by Kelly Sikkema on Unsplash
請完成一個 function:參數為 string,請判斷該字串正著看和反著看,可否是相同的單詞?是的話請回傳 true, 否則回傳 false。
例: palindrome(“abba”) === true palindrome(“16461”) === true palindrome(“abcdefg”) === false
function palindrome(str) {
}
這個問題要搭配上一節的字串反轉一起看,若還沒看過的請詳見上一節。
方法一、
1.要熟悉字串反轉的不同方式
// 字串反轉
function reversed(str) {
let reversedStr = ""
for (let char of str) {
reversedStr = `${char}${reversedStr}`
}
return reversedStr
}
function palindrome(str) {
return str === reversed(str) ? true : false
}
方法一為相當正規的方式,不論用什麼方式將字串反轉,只要反轉前後相等,皆為正解。
方法二、
思考邏輯
1.第一個字元跟最後一個字元比較,第二個字元跟倒數第二個字元比較,以此類推 2.知道 Array.prototype.every()。可檢查陣列中的每一個項目是否符合條件,回傳值僅為 true or false,很適合用來檢查陣列中的內容是否符合特定條件。
這個方法有個缺點:當檢查到陣列的中點時,理論上不必再繼續往下檢查了,因為後面的項目都已跟前面的項目比較過。 但 every()會遍歷陣列中的每一個項目,直到最後一個。
儘管如此,白板題就是一種火力展示,一個題目你會兩種以上的解法,絕對是多多益善。 況且 第一個字元跟最後一個字元比較,第二個字元跟倒數第二個字元比較 這種思考邏輯,在更進階的題目會經常使用。
function palindrome(str) {
let arr = str.split("")
let bool = arr.every((char, index) => {
return char === arr[arr.length - (index + 1)]
})
return bool
}
更精簡的 code 如下:
function palindrome(str) {
return str
.split("")
.every((char, index) => char === str[str.length - (index + 1)])
}
以下是本章節的程式碼: