2

この関数が何をするのか理解しようとしていますが、私にはわかりません。何か案は?

var mystery = function (str) {
    var x=true;
    for(var i=0; i<str.length/2; i++){
        if(str.charAt(i)!=str.charAt(str.length-i-1)){
            x = false;
        }
    }
    return x;
}
4

1 に答える 1

5

文字列が対称であるかどうか、つまり、インデックスのすべての文字が、のようiに文字列の終わり(at length-i-1)から同じ距離にある文字と等しいかどうかをテストするだけ"radar"です。

このように単純化して高速化することができます:

var mystery = function (str) {
    for (var i=0; i<str.length/2; i++){
        if (str.charAt(i) !== str.charAt(str.length-i-1)){
            return false;
        }
    }
    return true;
}

そして、少し速くなりますが、あまり明確ではありません:

var mystery = function (str) {
    for (var i=~~(str.length/2); i--;){
        if (str.charAt(i) !== str.charAt(str.length-i-1)){
            return false;
        }
    }
    return true;
}

楽しみのために、jspefはそれを確認します:http://jsperf.com/palyndromes

于 2013-03-14T20:46:38.013 に答える