Increasing Decreasing String

EasyHash TableStringCounting

Solution

export function sortString(s: string): string {
  const n = s.length;
  const counter = new Map<string, number>();
  for (const char of s) {
    counter.set(char, (counter.get(char) ?? 0) + 1);
  }
  const keys = [...counter.keys()].sort();
  const getCharacters = (reverse = false) => {
    let characters = '';
    for (const key of keys) {
      const count = counter.get(key) ?? 0;
      if (0 < count) {
        characters = reverse ? key + characters : characters + key;
        counter.set(key, count - 1);
      }
    }
    return characters;
  };
 
  let answer = '';
  let reversed = false;
  while (answer.length < n) {
    answer += getCharacters(reversed);
    reversed = !reversed;
  }
  return answer;
}