Saltar al contenido principal

Dart: Encontrar el primer carácter repetido

Youtube video player

Youtube video player

En este problema tenemos que encontrar el primer carácter que se repita en una cadena de texto. Por ejemplo si tenemos la cadena de texto ABCABC el primer carácter que se repite es A.

Ejemplos

A continuación hay varios ejemplos con el resultado esperado para probar si nuestra solución es correcta:

Texto: ABCABC
Resultado: A
Texto: ABBA
Resultado: B
Texto: AB😀D😀BA
Resultado: 😀
Texto: ABCDE
Resultado: null

Solución

En la siguiente solución vamos a iterar cada uno de los caracteres y los vamos a almacenar en Set. En cada ciclo checamos si el carácter existe en él Set o no, si existe, entonces hemos encontrado el primer carácter que se repite.

Veamos como funciona la solución:

Iteración 1: checamos si existe A en el set, si no la almacenamos

Iteración 1: checamos si existe A en el set, si no la almacenamos


Iteración 2: checamos si existe B en el set, si no la almacenamos

Iteración 2: checamos si existe B en el set, si no la almacenamos


Iteración 3: checamos si existe C en el set, si no la almacenamos

Iteración 3: checamos si existe C en el set, si no la almacenamos


Iteración 4: checamos si existe A en el set, si existe, el carácter repetido es A

Iteración 4: checamos si existe A en el set, si existe, el carácter repetido es A

Muy bien, ya sabemos como funciona la solución, es hora de codificarla:

final texto = 'ABCABC';

// Set donde almacenaremos los caracteres
final repetido = <int>{};

// Variable de ayuda para almacenar
// el primer carácter repetido
int? resultado;

// Iteramos cada uno de los caracteres
for (final caracter in texto.runes) {

// Si el set contiene el carácter hemos
// encontrado el primer carácter repetido
if (repetido.contains(caracter)) {
// Almacenamos el carácter repetido
// en la variable de ayuda
resultado = caracter;

// Terminamos la ejecución del ciclo for
break;
}

// Si el set no contiene el carácter
// lo agregamos al set
repetido.add(caracter);
}

// Imprimimos el resultado en la terminal
if (resultado == null) {
print('No hay carácter repetido');
} else {
print(
'El primer carácter repetido es: ${String.fromCharCode(resultado)}',
);
}
info

En Dart, si queremos acceder a los caracteres de un String tenemos que utilizar la API de Runes. Una "rune" es un número entero que representa un punto de código Unicode.

Puedes correr el código DartPad para ver los resultados:

Conclusión

Como en cualquier problema de programación hay muchas formas diferentes de abordar el problema diferentes, pero desde mi punto de vista, una de las más sencillas es utilizando un Set. Si ustedes conocen una forma diferente la pueden dejar en los comentarios.