1. 程式人生 > 其它 >JS迴文檢查(FreeCodeCamp專案)

JS迴文檢查(FreeCodeCamp專案)

需求

如果傳入的字串是迴文字串,則返回 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");