Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

116
Visualizações
Necesito generar una nueva cadena en javascript

Estoy tratando de resolver una pregunta para crear una nueva cadena comprimida. Cada carácter tiene un conteo junto a él y se suponía que debía generar una nueva cadena en orden alfabético seguido del conteo total de ese carácter dentro de la cadena.

Por ejemplo:

Entrada: "a10b1a5c1" Salida: "a15b1c1"

Entrada: "b10a1b5c1" Salida: "a1b15c1"

¿Cómo abordé esta pregunta?

  1. Tener un objeto con clave como carácter y valor como conteo
  2. Convertir el objeto en cadena

 function stringCompression(s) { const object={} for(var i=0; i<s.length-1; i++) { if(s[i].match(/[0-9]/)!==null && s[i+1].match(/[a-zA-Z]/) === null) { if(object.hasOwnProperty("s[i]")){ // Add previous and current value } else { object[s[i-1]]=parseInt(s[i]+s[i+1]) } } } return object } // output should be a15b1c1 const output= stringCompression("a10b1a5c1"); const final = Object.keys(output).map(key => `${key}${output[key]}`).join(""); console.log(final)

Pregunta:

  1. No puedo pensar en una manera de ordenar alfabéticamente
  2. La función que escribí no maneja si el personaje tiene un conteo de un solo dígito
  3. ¿Hay alguna otra forma en que pueda optimizar la solución?
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Puede reduce() todo a un solo objeto de "contador" y luego usar Object.entries() para convertir ese objeto en una matriz y realizar la clasificación , el aplanamiento y la unión en esa matriz:

 const compress = (s) => Object.entries( [...s.matchAll(/([A-Za-z])(\d+)/g)].reduce((a, [_, char, number]) => ({ ...a, [char]: (a[char] || 0) + +number }), {}) ).sort(([a], [b]) => a.localeCompare(b)).flat().join(''); console.log(compress('b10a1b5c1'));

about 4 years ago · Juan Pablo Isaza Relatório

0

 const STRING = 'a10c8b3a4' const isDigit = (charCode) => { return charCode >= 48 && charCode <=57 } const isAlphabet = (charCode) => { return charCode >= 97 && charCode <= 122 } const getSortedObject = (obj) => { return Object.keys(obj).sort().reduce( (object, key) => { object[key] = obj[key]; return object; }, {} ); } const getCompressedString = (string) => { let obj = {} let alphabet = '' let digit = '' let i = 0 while(i<string.length) { const char = string[i] const charCode = string.charCodeAt(i) if(isAlphabet(charCode)) { alphabet = char if(!obj[alphabet]) { obj[alphabet] = '0' } i++ } else if(isDigit(charCode)) { digit = '0' while(isDigit(string.charCodeAt(i)) && i<string.length) { digit += string[i] i++ } obj[alphabet] = parseInt(obj[alphabet]) + parseInt(digit) } } let compressedString = '' Object.keys(getSortedObject(obj)).forEach(key => {compressedString += key + obj[key]}) return compressedString } console.log(getCompressedString(STRING))

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda