Javascript 将反向字符串与它进行比较';没有使用.reverse()方法,它是原始的

Javascript 将反向字符串与它进行比较';没有使用.reverse()方法,它是原始的,javascript,string,Javascript,String,我试图将原始字符串参数与其相反的字符串参数进行比较。本质上,该函数应该验证给定字符串是否为回文。要点: 字符串需要全部转换为小写,我做到了 字符串只需要由字母数字字符组成,我做到了 比较时,原始字符串和格式化字符串必须匹配。如果返回,则返回布尔值true,否则返回false 以下是源代码:|或者,代码如下: function palindrome(str) { var reverseString; var temp; var formatted; // make sure i

我试图将原始字符串参数与其相反的字符串参数进行比较。本质上,该函数应该验证给定字符串是否为回文。要点:

  • 字符串需要全部转换为小写,我做到了
  • 字符串只需要由字母数字字符组成,我做到了
  • 比较时,原始字符串和格式化字符串必须匹配。如果返回,则返回布尔值true,否则返回false
  • 以下是源代码:|或者,代码如下:

    function palindrome(str) {
    
      var reverseString;
      var temp;
      var formatted;
    
      // make sure input gets converted to lowercase  
      temp = str.toLowerCase();
    
      // make sure all non-alphanumeric characters get removed  
      // once converted to lowercase, ensure that all special characters and digits are stripped from the string
      formatted = temp.replace(/[^A-Za-z]/g, '');
    
    
      // now we need to compare two strings: the raw input vs the string in reverse  
      for (i = formatted.length -1; i >= 0; i--) {
    
        reverseString += formatted[i];
      }
        if (reverseString === str) {
           return true;
      }
        return false;
    
    }
    
    
    palindrome("123$EYE");
    

    为什么要反向比较?您只需要比较头部和尾部相同位置的角色。首先是
    str[0]
    str[length-1]
    ,然后是
    str[1]
    str[length-2]
    ,依此类推。直到你到达中间,否则任何比较都会失败

    function isPalindrome(str) {
      var len = str.length
      for (var i = 0; i < Math.ceil(len/2); i++) {
        if (str[i] !== str[len - 1 - i]) {
          // or add more comparison rules here
          return false
        }
      }
      return true
    }
    
    isPalindrome('1')    // true
    isPalindrome('121')  // true
    isPalindrome('1221') // true
    isPalindrome('1211') // false
    
    函数isAlindrome(str){
    var len=str.length
    对于(变量i=0;i
    您没有初始化
    反向限制
    ,因此在开始时它将是
    未定义的
    。将字符
    'a'
    添加到
    undefined
    将返回字符串
    'undefineda'
    ,而不是您可能期望的
    'a'

    将代码更改为

    var reverseString = ''; 
    
    它会起作用的

    function palindrome(str) {
    
      var reverseString=""; // initialize every string to ""
      var temp="";
      var formatted="";
    
      temp = str.toLowerCase();
    
      formatted = temp.replace(/[^A-Za-z0-9]/g, ''); // I added 0-9 in your regex to have numbers in your string
    
      for (i = formatted.length -1; i >= 0; i--) {
        reverseString += formatted[i];
      }
    
        if (reverseString === formatted) { // change str to formatted
           return true;
      }
        return false;
    }
    
    var isPal = palindrome("123$EYE");
    alert(isPal); // try it on `alert` if it is true or false
    

    你的代码没问题。但是你有一些缺点。您应该将
    字符串
    初始化为
    ,这样它就不会有
    未定义的值
    。如果语句中的
    str
    ,这是您的原始字符串单词,您应该将
    格式化
    字符串放在上面,因为这是您删除特殊字符的字符串。

    字母数字字符

    function palindrome(str) {
        var temp;
        temp = str.toLowerCase();
        temp = temp.replace(/[^A-Za-z0-9]/g, '');
        console.log(temp);
        for (let a = 0, b = temp.length - 1; b > a; a++, b--) {
            if (temp.charAt(a) !== temp.charAt(b))
                return false;
        }
        return true;
    }
    

    下面是一种优雅的方式来反转文本:

    var rev = temp.split('').reverse().join(''); // reverse  
    
    查看小提琴:

    函数回文(str)
    {
    var temp=str.toLowerCase()//已转换为小写
    .替换(//[^A-Za-z]/g',);//删除非字母数字字符
    var rev=temp.split(“”).reverse().join(“”);//reverse
    日志(temp,'==',rev,'is',temp===rev);
    如果(温度===转速)
    {
    返回true;
    }
    返回false;
    }
    var out=回文(“123$EYE”);
    document.getElementById('divOutput')。innerHTML=out
    
    哦,天哪。谢谢我不知道为什么我试图将我的反向字符串与其原始参数进行比较。。使用格式化字符串是显而易见的逻辑。因此,通过初始化修改和比较运算符上修改的逻辑,大多数测试用例都可以工作。。然而,如果我试图通过这样一个论点:回文(“1眼换1眼”),我会得到正确的答案,而实际上它应该是错误的。Hm.@Cory这将是
    真的
    ,因为如果删除空格、句号和数字等特殊字符。这根绳子会被奥菲盯上。当您将其反转时,它将是相同的。@请记住,空格和句点也是特殊字符。您也可以在字符串格式中删除数字。嗯,是的,您是对的。我不认为这是出于某种原因,猜想这是学习曲线的一部分。虽然,根据我的说明。。该特定测试用例应该返回false。关于如何实现这一点,有什么意见吗?我唯一的猜测是空间。。但是很多其他带有空格的测试用例返回了正确的值**编辑:事实上,我相信是数字。我相信我需要编辑我的正则表达式以保留它们。@Cory字符串中有太多的特殊字符,你不会注意到要删除它们。所以我认为,在你的例子中,你应该包括删除所有可能的特殊字符,这样只剩下字母字符。