JS迴文演算法
palindrome(迴文)是指一個字串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣。
如果給定的字串是迴文,返回true
,反之,返回false
。
注意:首先需要刪除字串多餘的標點符號和空格,然後把字串轉化成小寫來驗證此字串是不是迴文。
1、先將字串全部轉換為小寫
str1 = str.toLowerCase();
2、刪除所有非字母數字字元和下劃線
reg = /[\w\_]/g (
/\w/ 為刪除所有非字母數字字元,匹配一個非單字字元;/\_/g 匹配下線。)
3、去掉非字母和非數字
str2 = str1.replace(reg, "");
4、字串分隔成陣列
str3 = str2.split("");
5、反轉陣列中的元素
str4 = str3.reverse();
6、反轉後的陣列轉化為字串
str5 = str4.join("");
7、如果測試用例是迴文,返回 true;反之,返回 false
return str2 === str5;
例程:
function palindrome(str) { var str1 = str.toLowerCase(); var reg = /[\W\_]/g; var str2 = str1.replace(reg, ""); var str3 = str2.split(""); var str4 = str3.reverse(); var str5 = str4.join(""); return str2 === str5; } palindrome("eye");
執行結果:
palindrome("eye")
應該返回一個布林值
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")
palindrome("My age is 0, 0 si ega ym.")
應該返回 true.
palindrome("1 eye for of 1 eye.")
應該返回 false.
palindrome("0_0 (: /-\ :) 0-0")
應該返回 true.