Traté de implementar esto usando un HashMap. Aquí está mi algoritmo:
Estoy usando colisión hash para agrupar todos los anagramas. Y usando números primos para evitar colisiones falsas.
1. Crear una matriz de enteros primos
int primos [] = {2, 3, 5, 7, …};
2. Cree un método para obtener el código hash:
int getHashCode (String str) {
int hash = 31;
para (i = 0 a la longitud de str) {
hash = hash * primos [‘a’ – str.charAt [i]];
}
devolver hash;
}
3. Ahora podemos crear un diccionario con todas las palabras dadas:
// Esta tabla hash o mapa se mantendrá, entero como clave y una lista de cadenas como valor.
// Este es un enfoque estándar para implementar el mapa hash. Puede encontrarlo en cualquier API, así que no estoy mencionando sus detalles aquí.
// Puedes buscar en java.util.HashMap
void loadDictionary (String [] palabras) {
para (palabra de palabras; i = 0 a la longitud de las palabras) {
int hash = getHashCode (palabra);
Lista anagrams = dictionary.get (hash);
if (anagramas! = nulo) {
anagrams.add (palabra);
} más
Lista newAnagrams = new ArrayList ();
newAnagrams.add (palabra);
dictionary.put (hash, newAnagrams);
}
}
}
4. Ahora aquí está el enfoque para encontrar anagramas:
int findNumberOfAnagrams (String str) {
Lista anagrams = dictionary.get (getHashCode (str));
return anagrams.size ();
}
Pero siento que podemos implementar de manera más eficiente.
- Si quiero que mi perro esté sano, ¿debo alimentarlo con comida cara para perros como Science Diet, o está bien una comida menos cara como Purina Dog Chow?
- ¿Me va a gustar Don Jon?
- Tengo un prototipo de salud física (no portátil), y quiero conectarlo a mi teléfono a través de la aplicación. ¿Es Bluetooth la única opción?
- ¿Qué consejo me darías si quisiera ser ejecutivo de tu empresa en diez años?
- Estoy tratando de no estar deprimido. ¿Cómo puedo concentrarme en estar agradecido por las cosas que tengo en mi vida?