$DifferentAlgorithmPalindrome

by mtambulut

JavaScript

// Complete the gameOfThrones function below.
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);

    /* 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"

    return "NO"

}

document.write(gameOfThrones("aaabbbb"),"---");
document.write(gameOfThrones("cdefghmnopqrstuvw"),"---");
document.write(gameOfThrones("cdcdcdcdeeeef"),"---");
document.write(gameOfThrones("acc"));