javascript

JavaScript: encontrar primer carácter que no se repite

En este post voy a resolver un ejercicio que dice así:

Crear una función que reciba una cadena y regrese la primera letra o carácter que no se repita en toda la cadena. No importa si la letra está en mayúscula o minúscula, se cuenta como repetida de igual manera. Eso sí, al regresar la letra se debe regresar en su forma original (es decir, si era mayúscula se regresa mayúscula, si no, minúscula).

Por si no se encuentra una letra que no se repita, se debe regresar una cadena vacía.

Dicho de otra manera, se necesita buscar la primera letra que aparezca exactamente una vez en la cadena. Lo he tomado de codewars.

Veamos entonces cómo resolverlo. Vamos a convertir a minúscula y a ver si una letra aparece únicamente una vez.

Solución al ejercicio

Hay que recorrer la cadena del inicio al fin, obteniendo carácter por carácter. Por cada uno, buscar si su posición inicial es igual a su posición final, en caso de que sea así, ese carácter no se repite.

La posición inicial quiere decir que es la primera aparición de la letra en la cadena de izquierda a derecha. La posición final quiere decir que es la primera aparición de la letra en la cadena de derecha a izquierda.

Por ejemplo, tenemos la palabra “estrés“. Recorremos y encontramos primero la letra e (vamos a omitir los acentos por ahora). La primera posición es en el 0 (o sea, índice 0 de la cadena) y su posición final es la 4, por lo tanto, la é se repite.

Pasamos por la letra s, su inicial es la 1 y su final es la 5, por lo tanto se repite. Pero al llegar a la letra t, su posición inicial es la 2 y su final la 2 (son iguales), por lo tanto la t es la que no se repite.

Hablar es de mal gusto, muéstrame el código

Las funciones que nos ayudan a saber la primera y última aparición son respectivamente indexOf y lastIndexOf.

Para recorrer una cadena usamos charAt y un simple ciclo for. En el caso de las minúsculas usamos toLowerCase.

Una vez que ya explicamos el algoritmo, veamos el código. He creado una función que recibe una cadena y devuelve la primera letra que no se repita. Queda así:

const primeraLetraQueNoSeRepite = cadena => {
 // A minúscula porque todas deben estar en la misma notación
 let cadenaEnMinuscula = cadena.toLowerCase();
 // Recorrer cadena letra por letra
 for (let x = 0; x < cadena.length; x++) {
  // Obtener carácter actual, y convertirlo a minúscula
  let caracterActual = cadena.charAt(x).toLowerCase();
  // Ver si primera aparición y última aparición son iguales
  if (cadenaEnMinuscula.indexOf(caracterActual) === cadenaEnMinuscula.lastIndexOf(caracterActual)) {
   // En caso de que sí, regresamos el carácter de la cadena original en la posición que vamos
   return cadena.charAt(x);
  }
 }
 // Terminamos de recorrer la cadena pero no encontramos ninguna letra que no se repitiera, así que regresamos cadena vacía
 return "";
}

const pruebas = [
 "Hola",
 "Ejemplo",
 "AAAAAAAA",
 "parzibyte",
 "osos",
 "bBbbBbbBB",
 "abcdeabcde",
 "abcab",
 "Me gusta mucho programar en JavaScript",
 // Algo de Elvis Presley solamente para experimentar
 "Baby, if I made you mad For something I might have said Please, let's forget the past The future looks bright ahead A-don't be cruel to a heart that's true I don't want no other love A-baby, it's still you I'm thinking of, mm",
];

pruebas.forEach(prueba => {
 console.log(`Primera letra que no se repite en '${prueba}': '${primeraLetraQueNoSeRepite(prueba)}'`);
});

Dentro del código también he incluido algunas maneras de probar la función.

Primera letra que no se repite en JavaScript

Probar y descargar ejercicio

Puedes descargar el código y ejecutarlo en el navegador o con Node.Js.

Y así es como terminamos por hoy. Te invito a leer más sobre JavaScript.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.