JS迴文檢查(FreeCodeCamp專案)
阿新 • • 發佈:2022-05-09
需求
如果傳入的字串是迴文字串,則返回 true
。 否則返回 false
迴文 palindrome,指在忽略標點符號、大小寫和空格的前提下,正著讀和反著讀一模一樣。
注意:檢查迴文時,你需要先去除所有非字母數字的字元(標點、空格和符號),並將所有字母都轉換成大寫或都轉換成小寫。
測試結果要求
palindrome("eye")
應返回一個布林值。
palindrome("eye")
應返回 true
。
palindrome("_eye")
應返回 true
。
palindrome("race car")
應返回 true
。
palindrome("not a palindrome")
false
。
palindrome("A man, a plan, a canal. Panama")
應該返回 true
。
palindrome("never odd or even")
應返回 true
。
palindrome("nope")
應該返回 false
。
palindrome("almostomla")
應返回 false
。
palindrome("My age is 0, 0 si ega ym.")
應返回 true
。
palindrome("1 eye for of 1 eye.")
應返回 false
palindrome("0_0 (: /-\ :) 0-0")
應返回 true
。
palindrome("five|\_/|four")
應返回 false
。
已給框架
function palindrome(str) {
return true;
}
palindrome("eye");
需求分析(解題思路)
首先判斷字串是否為迴文(正著讀反著讀都一樣)
var newStr = "";// 建立一個空的String型以存放倒過來的字串 // 將字元(str) 倒著插入 新建的空的String型(newStr) // 1、在for迴圈裡var一個i變數,其初始值為 字串長度-1(為了讓i等於字串的最後一個字元的索引值),讓i不斷減小,直至減小到0 // 2、將數組裡的第i個字元依次新增到newStr裡 for(var i = str.length - 1;i >= 0;i--) { newStr += str[i]; } // 返回 判斷兩個字串是否相等 的布林值 return str == newStr;
接著,滿足 刪除原字串裡除了字母數字以外的東西 的需求
注意:這個需要寫在 判斷迴文 前面
// 去除字母數字以外的字元
// 1、判斷字串中是否包含0-9,a-z,A-Z以外的符號
// 2、如果有,將它們刪除(翻譯:將它們改成“”)
if(str.match(/[^0-9a-zA-Z]/)) {
while (str.match(/[^0-9a-zA-Z]/)) {
str = str.replace(/[^0-9a-zA-Z]/,"");
}
}
// 把所有空格刪除
// 思路和 去除字母數字以外的字元 一樣
if(str.match(" ")) {
while (str.match(" ")) {
str = str.replace(" ","");
}
}
最後,滿足 將所有字母都轉換成大寫或都轉換成小寫 的需求
注意:這個也需要寫在 判斷迴文 前面
// 把所有字母轉成小寫
str = str.toLowerCase();
最終程式碼
function palindrome(str) {
// 去除字母數字以外的字元
if(str.match(/[^0-9a-zA-Z]/)) {
while (str.match(/[^0-9a-zA-Z]/)) {
str = str.replace(/[^0-9a-zA-Z]/,"");
}
}
// 把所有字母轉成小寫
str = str.toLowerCase();
// 把所有空格刪除
if(str.match(" ")) {
while (str.match(" ")) {
str = str.replace(" ","");
}
}
// 迴文檢查
var newStr = "";
for(var i = str.length - 1;i >= 0;i--) {
newStr += str[i];
}
return str == newStr;
}
palindrome("eye");