$hackerRank-challange

by mtambulut

JavaScript

function gameOfThrones(s) {
    var palindromCount = 0;
    var singleCharacter = 0;
    var doubleCharacter = false;

    /* Purpose of regular expressions is removing space an unnecessary sign and also removing case sensitivity by using toLowerCase method for catching clean expression
     */
    var regex = /[^A-Za-z0-9]/g;
    var cleanString = s.toLowerCase().replace(regex, '');

    // Purpose of allCharacter variable is to be able to push different character in one array
    var allCharacter = cleanString.split('').filter((v, i, a) => a.indexOf(v) === i);
    /* filter alternatifi olarak kullanılabilir.
     var cleanString = "asdkjasfjshcfkjdlscdschnwviaaaaaaaaaaaaaaaaaaaaaaa";
     var allCharacter = cleanString.split('');
     var array = [];
     for(var i=0; i< allCharacter.length; i++){
         if(array.indexOf(allCharacter[i]) == -1) // array içerisinde karakteri bulamazsa -1 döner bulursa bulunduğu index değerini döner
            array.push(allCharacter[i]);
     } console.log(array);
     }
    
    */
    /* We can find how many times clean expression is used by all character loop.
     * We understand if it makes any palindrome.
     */
    for (var y = 0; y < allCharacter.length; y++) {
    // Character of in loop specifies how many characters are in the array.
        let characterCount = cleanString.match(new RegExp(allCharacter[y], "g")).length;

        if (characterCount == 1)
            singleCharacter++;

        if (characterCount % 2 == 0)
            doubleCharacter = true;

        if (characterCount > 1 && characterCount % 2 == 1)
            palindromCount++;
    }

    // We need odd and even characters to create a palindrome
    if (singleCharacter == 1 && !palindromCount && doubleCharacter)
        return "YES"
    else if (!singleCharacter && palindromCount == 1 && doubleCharacter)
        return "YES"
    else if (!singleCharacter && !palindromCount && doubleCharacter)
        return "YES"

    return...