algorithms · go · data-structures · leetcode-solution · algorithms-data-structures

Desbloqueando la unicidad: dominando el algoritmo de caracteres únicos en Go

2 min de lectura

¡Hola, entusiasta de Go! Hoy vamos a cubrir un nuevo algoritmo en Go.

Esta es una pregunta habitual en entrevistas para posiciones de nivel inicial, ya que cubre fundamentos de Go como maps, runes y manipulación de strings. Vamos a explorar cómo determinar si todos los caracteres de un string son únicos.

Planteamiento del problema

Como venimos haciendo, empecemos por entender el planteamiento del problema.

Implementar un algoritmo para determinar si un string contiene solo caracteres únicos.

Desglosando el planteamiento, tenemos un string como input, necesitamos procesar cada carácter del string para determinar si alguno se repite, y finalmente devolver un booleano como output.

Ahora que ya establecimos nuestro input, proceso y output, definamos el algoritmo para resolverlo.

Algoritmo para resolverlo

El primer paso es inicializar una estructura de datos que contenga cada carácter y registre sus apariciones. En Go, tenemos maps para este propósito. Usando la función incorporada make, declaremos nuestro conjunto de caracteres.

Cuando se usa con maps, esta función espera un solo argumento: el tipo del map. Aquí estamos declarando un map de runes con valores bool para registrar la aparición de cada carácter.

charMap := make(map[rune]bool)

A continuación, utilizando la elegante sintaxis del for-range de Go, iteramos sobre cada carácter del string.

for _, c := range s {} //s is the input string

Aquí es donde ocurre la magia: si c ya está en charMap, devolvemos false porque ese carácter ya apareció antes en el string.

if charMap[c] {
	return false
}

Si el carácter todavía no está en charMap, lo agregamos para registrarlo en iteraciones futuras.

charMap[c] = true

Finalmente, si el loop termina sin encontrar ninguna repetición, significa que todos los caracteres son únicos, así que devolvemos true.

return true

¡Y listo! Resolvimos el algoritmo de caracteres únicos. Aquí van algunos casos de prueba para verificar la solución:

  • abcdef → devuelve true porque no contiene caracteres repetidos.

  • hello → devuelve false porque contiene una letra repetida, l

Reflexiones finales

Vamos aumentando gradualmente la dificultad de los algoritmos en esta serie. Como he venido remarcando, hay que fortalecer los fundamentos antes de enfrentar desafíos más complejos. Como dice el dicho: “hay que aprender a caminar antes de correr”.

Así que a seguir practicando, y ojalá se acuerden de este blog cuando llegue ese trabajo tan buscado. Como siempre, este y otros algoritmos en Go y TypeScript están disponibles en mi repo de GitHub de algoritmos: https://github.com/RubenOAlvarado/algorithms

¡Hasta la próxima!