这是我的代码:该函数适用于输入:“眼睛”、“赛车”、“不是回文”、“一个人、一个计划、一条运河。巴拿马”、“从不奇数或偶数”…然而,当输入是“almo人”时,它返回“true”。有人能解释一下为什么吗?
function palindrome(str) {
var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
newStr = newStr.replace(/\s+/g, '');
newStr = newStr.toLowerCase();
var arr = newStr.split('');
var arr2 =[];
for(x = 0; x < arr.length; x++){
arr2.push(arr[arr.length-1-x]);
}
for(y = 0; y < arr.length; y++){
if(arr[y] == arr2[y]){
return true;
}
else{
return false;
}
}
}
palindrome("almostomla");
您只检查最后一个for循环中的第一个和最后一个字符。
for(y = 0; y < arr.length; y++){
if(arr[y] == arr2[y]){ //if first and last chars equal you are returning true.
return true;
}
else{
return false;
}
}
您应该检查所有字符,直到差异或结束。
for(y = 0; y < arr.length; y++){
if(arr[y] != arr2[y]){
return false;
}
}
return true; --that means two arrays are same.
我真的会像下面这样替换回文检查功能,去除噪音后:
function palindrome(str) {
var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
newStr = newStr.replace(/\s+/g, '');
newStr = newStr.toLowerCase();
var arr = newStr.split('');
return arr.join('') == arr.reverse().join('');
}
alert(palindrome("almostomla"));
alert(palindrome("never odd or even"));
为什么不简单地这样做:
function palindrome(str) {
var isPalindrome = true;
var newStr = str.replace(/[^0-9a-zA-Z]/g, '');
newStr = newStr.replace(/\s+/g, '');
newStr = newStr.toLowerCase();
var arr = newStr.split('');
for(x = 0; x < arr.length / 2; x++) {
if(arr[x] != arr[arr.length - 1 - x])
{
isPalindrome = false;
break;
}
}
return isPalindrome;
}