universal lucky string

by Shridhar Baddur

JavaScript

function solution(S) {
  var charList = {};
  for (i = 0; i < S.length; i++) {
    chr = S.charAt(i);
    if (charList[chr]) {
      charList[chr]++;
    } else {
      charList[chr] = 1;
    }
  }
  return (displayResult(charList, S))
}

function displayResult(charList, S) {
  var flag = true;
  var temp;
  var count = 0;
  var sum = 0;
  var ct = 0
  var dif = 0
  Object.keys(charList).forEach(function(x) {
    sum = sum + parseInt(charList[x]);
    if (temp && temp !== charList[x]) {
      ct++;
      dif = parseInt(temp) - parseInt(charList[x]);
      dif = (sum === S.length) && (dif < 1) ? (-dif) : dif;
      if (!count && (dif == 1 || charList[x] == 1)) {
        count++;
      } else {
        flag = false;
      }
      if (charList[x] != 1 || dif < 1) {
        temp = charList[x];
      }

    } else {
      temp = charList[x];
    }
    if (sum === S.length && dif == 1 && ct <= 2) {
      flag = true;
    }

  });
  if (flag) {
    return 'YES';
  } else {
    return 'NO';
  }
}