尝试在freeCodeCamp上完成算法。我最终找到了一种有效的方法,但我仍然不明白为什么这种方法并不适用于所有情况。
function palindrome(str) {
var alphaNumericStr = str.replace(/\W/g,"");
var lowerCaseAlphaNumericString = alphaNumericStr.toLowerCase();
var arr = lowerCaseAlphaNumericString.split("");
arr.reverse();
var reversedString = arr.join("");
if(str === reversedString){
return true;
}
return false;
}
palindrome("race car");
答案 0 :(得分:0)
您正在将已删除空格并转换为小写的字符串与原始字符串进行比较。将条件替换为:
if(lowerCaseAlphaNumericString == reversedString){
rethrn true;
}
return false;
如果你感兴趣的话,这里有一点点重构:
// ...
var reversedString = arr.join('');
return lowerCaseAlphaNumericString == reversedString;
答案 1 :(得分:0)
这是您出错的地方if(str === reversedString)
试试这个:
if(lowerCaseAlphaNumericString === reversedString) {
return true;
}
return false;
}
答案 2 :(得分:0)
可能还有另一种方法。在这种方法中,角落案件是分开处理的。
function check_Palindrome(input_str){
var astr = input_str.toLowerCase().replace(/\W/g,'');
var acount = 0;
if(astr==="") {
console.log("Not Palindrome.");
return false;
}
if ((astr.length) % 2 === 0) {
acount = (astr.length) / 2;
} else {
if (astr.length === 1) {
console.log("Palindrome.");
return true;
} else {
acount = (astr.length - 1) / 2;
}
}
for (var x = 0; x < acount; x++) {
if (astr[x] != astr.slice(-1-x)[0]) {
console.log("Not Palindrome.");
return false;
}
}
console.log("Palindrome.");
return true;
}