提问者:小点点

我在javascript中遇到回文函数的问题


这是我的代码:该函数适用于输入:“眼睛”、“赛车”、“不是回文”、“一个人、一个计划、一条运河。巴拿马”、“从不奇数或偶数”…然而,当输入是“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");

共3个答案

匿名用户

您只检查最后一个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;
}