/**
* @param {string} S
* @return {string}
*/
const reorganizeString = (S) => {
let counts = [];
for (let i = 0; i < 26; i++) {
counts[i] = 0;
}
for (let i = 0; i < S.length; i++) {
counts[S.charAt(i).charCodeAt(0) - 'a'.charCodeAt(0)] += 100;
}
for (let i = 0; i < 26; i++) {
counts[i] += i;
}
//Encoded counts[i] = 100*(actual count) + (i)
counts.sort((a, b) => a - b);
let t = 1;
let ret = [];
for (let i = 0; i < 26; i++) {
const ch = String.fromCharCode('a'.charCodeAt(0) + (counts[i] % 100));
let count = Math.floor(counts[i] / 100);
if (count > Math.floor((S.length + 1) / 2))
return '';
while (count > 0) {
if (t >= S.length)
t = 0;
ret[t] = ch;
t += 2;
count--;
}
}
return ret.join('');
};
console.log(reorganizeString('aab'));
// 'aba'
Categories