Pregunta

En "Perlas de programación" He conocido el siguiente problema. La pregunta es la siguiente: "Las palabras de impresión en orden decreciente de frecuencia". Según tengo entendido problema es el siguiente. Supongamos que hay una matriz de cadenas dado, vamos a llamarlo s (palabras que he elegido al azar, no importa),

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};

ver esa cadena "gato" se produce 4 veces, "zorro" 3 veces y "perro" 2 veces. Así, el resultado deseado será la siguiente:

cat
fox
dog

He escrito el siguiente código en Java:

import java.util.*;
public class string {
   public static void main(String[] args){
      String s[]={"fox","cat","cat","fox","dog","cat","fox","dog","cat"};
      Arrays.sort(s);
      int counts;
      int count[]=new int[s.length];
      for (int i=0;i<s.length-1;i++){
         counts=1;
         while (s[i].equals(s[i+1])){
            counts++;
         }
         count[i]=counts;
      }
   }
}

Me han ordenado la matriz y han creado una matriz recuento donde escribo el número de ocurrencias de cada palabra en la matriz.

Mi problema es que de alguna manera el índice del elemento de la matriz de enteros y el elemento de matriz de cadenas no es lo mismo. ¿Cómo puedo imprimir las palabras de acuerdo a los elementos máximos de la matriz entera?

¿Fue útil?

Solución

Para realizar un seguimiento de la cuenta de cada palabra, me gustaría utilizar un mapa que traza una palabra para que de cuenta actual.

String s[]={"cat","cat","dog","fox","cat","fox","dog","cat","fox"};

Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : s) {
    if (!counts.containsKey(word))
        counts.put(word, 0);
    counts.put(word, counts.get(word) + 1);
}

Para imprimir el resultado, ir a través de las teclas en el mapa y obtener el valor final.

for (String word : counts.keySet())
    System.out.println(word + ": " + (float) counts.get(word) / s.length);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top