$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...