Contar el número de palabras diferentes de una palabra - Código Java

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Contar el número de palabras diferentes de una palabra - Código Java

    Registrate para eliminar la publicidad.

    Hola, les quiero compartir este pequeño código que acabo de hacer en Java para contar el número diferente de palabras que se pueden formar con una cadena (palabra). Definiendo lo mejor.

    Problema:

    Dada una palabra, se quiere conocer el número de diferentes palabras que se pueden formar. Este número diferentes de palabras no importa que no tengan significado alguno.

    Ejemplo:

    La palabra abc tiene 6 diferentes formas de formarse, estas diferentes palabras son:
    1. abc
    2. bca
    3. cab
    4. cba
    5. bac
    6. acb
    Entrada:

    Una palabra por cada entrada, cuando ya no se quiera saber el número de palabras de una palabra simplemente ingresas 0 para terminar el programa.​

    Salida:

    Por cada palabra de entrada que hayas ingresado, se mostrará el número de palabras que se podrá formar con esta.

    Ejemplo de entrada y salida:
    Entrada Salida
    abc 6
    abcde 120
    aabb 6
    matematicas 1663200
    0 Fin del programa
    Ahora les muestro el pequeño codigo que hice en java, este puede ser mejorado para ser más eficiente. Esto lo tratare de hacer con el tiempo.

    Código:
    import java.util.HashMap;
    
    /**
     * Representación de una palabra, con el motivo principal de contar el número de
     * palabras que se pueden formar apatir de una.
     *
     * @author iLuis
     * @version 1.0
     */
    public class Palabra {
    
        private final String palabra;
        private final HashMap<Character, Integer> frecuencia;
    
        /**
         * Construye una palabra a partir de una cadena.
         *
         * @param palabra Cadena para construir una palabra.
         */
        public Palabra(String palabra) {
            this.palabra = palabra;
            this.frecuencia = new HashMap<>();
        }
    
        /**
         * Dada la palabra actual, se contaran sus caracteres repetidos. Esto con la
         * ayuda de una HashMap, con lo cual recorre la cadena y va añadiendo las
         * letras y sumando las coincidencias.
         *
         * @return Arreglo que en cada celda contiene un numero n que representa las
         * repeticiones del caracter.
         */
        public Object[] contarLetras() {
            for (int i = 0; i < palabra.length(); i++) {
                if (frecuencia.containsKey(palabra.charAt(i))) {
                    frecuencia.put(palabra.charAt(i),
                            (int) frecuencia.get(palabra.charAt(i)) + 1);
                } else {
                    frecuencia.put(palabra.charAt(i), 1);
                }
            }
            return frecuencia.values().toArray();
        }
    
        /**
         * Número diferente de palabras que se pueden formar apartir de una palabra.
         * Las diferentes palabras pueden no tener significado.
         *
         * @return Número de palabras que se pueden formar.
         */
        public int numPalabrasDiferentes() {
            Integer numerador = getFactorial(this.palabra.length());
            Integer denominador = 1;
            Object[] arreglo = contarLetras();
            for (Object arreglo1 : arreglo) {
                if ((Integer) arreglo1 > 1) {
                    denominador = denominador * getFactorial((Integer) arreglo1);
                }
            }
    
            return (numerador / denominador) % 100000007;
        }
    
        /**
         * Genera el numero factorial de un entero.
         *
         * @param numero que se quiere calcular el factorial.
         * @return Número factorial del entero pasado como parametro.
         */
        public int getFactorial(int numero) {
            int factorial = 1;
            for (int i = 1; i <= numero; i++) {
                factorial *= i;
            }
            return factorial;
        }
    }


    Código:
    import java.util.Scanner;
    
    /**
     * Prueba de la clase Palabra.
     *
     * @author iLuis
     * @version 1.0
     */
    public class Main {
    
        /**
         * Puede contener varias entradas de palabras(cadenas) y en seguida se
         * mostraran el número diferentes de palabras que se pueden formar con tal
         * palabra. Para terminar el programa, solo debes poner 0 en lugar de una
         * palabra.
         *
         * @param args Sin uso.
         */
        public static void main(String[] args) {
            Scanner leer = new Scanner(System.in);
            String palabra = "";
            while (!"0".equals(palabra = leer.nextLine())) {
                Palabra nuevaPalabra = new Palabra(palabra);
                System.out.println(nuevaPalabra.numPalabrasDiferentes());
            }
        }
    
    }
    REGLAS | SOPORTE HOSTING P2H | CONTACTO

    DNS

    ns1.dioseshost.eu
    ns2.dioseshost.eu

    NO HAY SOPORTE POR MENSAJE PRIVADO
Trabajando...
X