我正在接受freecodecamp挑战"检查Palindromes"。编写一个函数来检查给定的字符串是否是回文。这是我的代码:
function palindrome(str) {
str = str.toLowerCase();
for(var i=0; i<str.length; i++){
if((str[i] > 'z' || str[i] < 'a') && (str[i] < '0' || str[i] > '9')){
str = str.replace(str[i], '');
}
}
for(i=0; i<str.length/2; i++){
if(str[i] != str[str.length-1-i]){
return false;
}
}
return true;
}
但它没有正常工作。当我使用replace(/[\W_]/g, '');
时:
function palindrome(str) {
str = str.toLowerCase().replace(/[\W_]/g, '');
// for(var i=0; i<str.length; i++){
// if((str[i] > 'z' || str[i] < 'a') && (str[i] < '0' || str[i] > '9')){
// str = str.replace(str[i], '');
// }
// }
for(i=0; i<str.length/2; i++){
if(str[i] != str[str.length-1-i]){
return false;
}
}
return true;
}
功能正常。我的第一种方法不正确吗?
答案 0 :(得分:0)
Palindromes忽略大写,空格,标点符号和换行符等。
所以:
一个男人。一个计划。运河:巴拿马!
是一个有效的回文。
因此,在尝试评估之前,您需要从字符串中删除所有标点符号和空格,以便您实际评估的字符串为:
amanaplanacanalpanama
然后你可以很容易地对剩下的角色做任何比较。
我前一段时间做了其中一项并包含了一些测试,可能值得一看:https://github.com/pvencill/palindrome