Calcular la frecuencia de caracteres de una cadena (Java, rendimiento)

Artemis Hunter:

Problema

Escribí este programa para comprobar el número de veces que cada letra aparece en una cadena de entrada por parte del usuario. Funciona bien, pero hay una soluciones más eficientes o alternativas de ir sobre esta tarea que reiterando a través de un veintiséis elemento de duración matriz para cada personaje?

Código

import java.util.Scanner;
public class Letters {
    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);
        char[] c = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        int[] f = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        System.out.println("Enter a string.");
        String k = sc.nextLine();
        String s = k.toUpperCase();
        s = s.trim();
        int l = s.length();
        System.out.println("Checking string = " + s);
        char ch;
        for (int i = 0; i < l; i++) {
            ch = s.charAt(i);
            for (int j = 0; j < c.length; j++) {
                if (ch == c[j]) {
                    f[j]++;
                }
            }
        }
        System.out.println("Char\tFreq");
        for (int i = 0; i < c.length; i++) {
            if (f[i] != 0) {
                System.out.println(c[i] + "\t" + f[i]);
            }
        }
    }
}
Elliott fresca:

No es necesario que explícitamente initialize 26 entradas en la matriz de frecuencia (el valor predeterminado es cero); También no es necesario para mantener la tabla de caracteres (es suficiente conocer el desplazamiento). Es decir, su código puede eliminar cpor completo y calcular cada letra; me gusta,

Scanner sc = new Scanner(System.in);
int[] f = new int[26];
System.out.println("Enter a string.");
String orig = sc.nextLine();
String k = orig.trim().toUpperCase();
System.out.println("Checking string = " + orig);
for (char ch : k.toCharArray()) {
    f[ch - 'A']++;
}
System.out.println("Char\tFreq");
for (int i = 0; i < f.length; i++) {
    if (f[i] != 0) {
        System.out.println((char) ('A' + i) + "\t" + f[i]);
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=207172&siteId=1
Recomendado
Clasificación