Dart: Encontrar el primer carácter repetido
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:
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)}',
);
}
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.