Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更有效的回文代码_Javascript_Dry_Performance_Palindrome - Fatal编程技术网

Javascript 更有效的回文代码

Javascript 更有效的回文代码,javascript,dry,performance,palindrome,Javascript,Dry,Performance,Palindrome,这是我用于coderbyte挑战“回文”的代码。如果str前后相同(一个回文),则挑战在于返回true。我得到了所有可能的分数,但我知道我的代码有点难看。编写此代码的更有效方法是什么。看起来我在重复我自己的话,这似乎是可以用for循环来写的东西。我还看到,如果回文较长而不使用for循环,那么当它真的为假时,它是如何返回true的: function Palindrome(str) { var low=str.toLowerCase() var first = low.charA

这是我用于coderbyte挑战“回文”的代码。如果str前后相同(一个回文),则挑战在于返回true。我得到了所有可能的分数,但我知道我的代码有点难看。编写此代码的更有效方法是什么。看起来我在重复我自己的话,这似乎是可以用for循环来写的东西。我还看到,如果回文较长而不使用for循环,那么当它真的为假时,它是如何返回true的:

function Palindrome(str) { 
    var low=str.toLowerCase()
    var first = low.charAt(0);
    var last = low.charAt(low.length-1);
    var mid = low.charAt(1);
    var mid1 = low.charAt(low.length-2);


       if(first===last)
        if(mid===mid1)


        {
           return true    
        }
            else
        {
            return false    
        }
        else
        {
            return false
        }
        }
print(Palindrome(readline()));           

要检查字符串是否为回文,只需将其与反向版本进行比较。
说“hello”这个词不是一个无聊的词,因为它的倒转版本“olleh”不等于它。但是单词
eye
与单词
abba
是一个回文,因为它们等同于它们的反向版本

代码示例:

(function() {
    var reverseStr,
        isPalindrome,
        testStrings;

    reverseStr = function(str) {
        var chars = [];
        for(var i = str.length - 1; i > -1; i--) {
            chars.push(str[i]);
        }
        return chars.join('');
    };

    isPalindrome = function(str, ignoreCase) {
        if(ignoreCase) {
            str = str.toLowerCase();
        }
        return str === reverseStr(str);
    };

    testStrings = ['abba', 'hello', 'eye'];

    for(var i = 0, l = testStrings.length; i < l; i++) {
        var word = testStrings[i];
        console.log('Word "%s" is %sa palindrome',
            word,
            isPalindrome(word) ? '' : 'not ');
    }
})();
(函数(){
var reverseStr,
伊斯帕林德罗姆,
测试字符串;
reverseStr=函数(str){
var chars=[];
对于(变量i=str.length-1;i>-1;i--){
chars.push(str[i]);
}
返回chars.join(“”);
};
isAlindrome=函数(str,ignoreCase){
如果(忽略案例){
str=str.toLowerCase();
}
返回str===reverseStr(str);
};
testStrings=['abba','hello','eye'];
for(var i=0,l=testStrings.length;i

下面列出了另一种工作更快的方法。在这里,您不会收到要比较的反向字符串,而是从字符串的开始和结束走向字符串的中间

var isPalindrome = function(str, ignoreCase) {
    var length,
        last,
        halfLength,
        i;
    if(ignoreCase) {
        str = str.toLowerCase();
    }
    length = str.length;
    last = length - 1;
    halfLength = Math.ceil(length / 2);
    for(i = 0; i < halfLength; i++) {
        if(str[i] !== str[last - i]) {
            return false;
        }
    }
    return true;
};
var isPalindrome=函数(str,ignoreCase){
变量长度,
最后,,
半身,
我
如果(忽略案例){
str=str.toLowerCase();
}
长度=str.length;
最后=长度-1;
半长=数学单元(长度/2);
对于(i=0;i


这就是我的结局。确保字符串都是小写的,这样它就不会将可能为true的参数读为false,去掉空格,然后根据字符串是否等于其反面返回true/false。

这里有一个更简单的方法:

var isPalindrome = function(string) {
    string = string.toLowerCase();
    if(string.length===0){
    return false;
    }
    for (var i = 0; i < Math.ceil(string.length/2); i++) {
        var j = string.length-1-i;
        var character1 = string.charAt(i);
        var character2 = string.charAt(j);
        if (character1 !== character2) {
            return false;
        }
    }
    return true;
};
var isPalindrome=函数(字符串){
string=string.toLowerCase();
if(string.length==0){
返回false;
}
for(var i=0;i
我遇到了回文编码的难题,你必须替换所有非字母数字字符(标点符号、空格和符号),当然还要将字符串改为小写。这是我的解决方案

 function palindrome(str) {

  var low = str.toLowerCase(); 
  var filteredStr = low.replace(/[^0-9a-z]/gi, "");  
  var split = filteredStr.split("");
  var backward = split.reverse();
  var join = backward.join("");


  if (filteredStr === join) {
    return true;
  } else {
    return false;
  }

}
如果您关心代码行数,这里有一个较小的

 function palindrome(str) {

  var low = str.toLowerCase(); 
  var filteredStr = low.replace(/[^0-9a-z]/gi, "");  
  var backward = filteredStr.split("").reverse().join("");


  if (filteredStr === backward) {
    return true;
  } else {
    return false;
  }

}

该代码对初学者很友好,并且不言自明,但是如果您对该代码有任何疑问,请随时提问;)

第一步:修正你的缩进,这样就可以清楚地知道发生了什么。我不知道你是如何从代码中得到更多的分数的,看起来测试还不够全面。该代码仅适用于最多五个字符的回文。您需要检查整个字符串,而不仅仅是前两个和最后两个字符。如果测试用例包含其他特殊符号,如破折号,这仍然会失败。您可以编写一个
replace
方法来删除其他一些不是这样的字母的字符:
str=str.replace(/\s\-\'/g')
而不是
str=str.split(“”)。join(“”)
 function palindrome(str) {

  var low = str.toLowerCase(); 
  var filteredStr = low.replace(/[^0-9a-z]/gi, "");  
  var backward = filteredStr.split("").reverse().join("");


  if (filteredStr === backward) {
    return true;
  } else {
    return false;
  }

}