Aqui eu criei um programa para compactação de strings, então para input chars = ["a","a","b","b","c","c","c"] estamos obtendo uma saída como 6 caracteres ["a","2","b","2","c","3"]. Então criei um programa usando a abordagem de array, que também é muito demorada e complexa. Existe alguma solução usando a abordagem de dois ponteiros ou recursão para resolver esse programa com muito pouco código e eficiência? Você pode fornecer isso com um código muito curto? O código é fornecido abaixo.
var compress = function(chars) {
if (!chars.length) {
return 0;
}
let j = 0;
let cur = chars[0];
let counter = 0;
for (let i = 0; i <= chars.length; i++) {
if (chars[i] === cur) {
counter++;
} else {
// Otherwise, add the current character and count to the compressed array
chars[j] = cur;
if (counter > 1) {
const s = counter.toString();
for (let k = 0; k < s.length; k++) {
chars[++j] = s[k];
}
}
j++;
cur = chars[i];
counter = 1;
}
}
return j
};
console.log(compress ('aaaabbc'))//a4b2c