Finden Sie die Frequenz des Zeichens in ein array von Strings

Gegeben ein array von Strings, finden die Häufigkeit des Auftretens eines bestimmten Zeichens.

zB. Angesichts array {"hon","bhig","zzz","Hallo"} und-Zeichen 'h', die Ausgabe ist 3.

Hier ist, wie ich es gelöst:
Ansatz 1: Durchlaufen und jeder string in dem array, Inkrementieren eines Zählers jedes mal, dass der Charakter tritt in der aktuellen Zeichenfolge. Laufzeit ist O(n), wobei n die kumulative Länge aller strings in dem array.

Ansatz 2: Dieser kann optimiert werden indem eine HashMap; dies ist besonders hilfreich, wenn die Saiten wiederholt in das array. Hier ist, was ich Tat: nehmen Sie sich eine HashMap, wo key = string und Wert = Anzahl der Zeiten, die Zeichenfolge tritt in das array. Setzen Sie alle Zeichenfolgen, die in dem gegebenen array in die HashMap zusammen mit Ihren zählt. Dann Durchlaufen Sie jedes Schlüssel-Wert-paar in die HashMap, zählen die Anzahl der Zeiten, die die angegebenen Zeichen erscheint in der key(string) und erhöhen es durch den entsprechenden Wert in die HashMap.

Meine Frage ist: gibt es einen besseren Weg, dies zu tun?

Hier der code:

HINWEIS: BITTE LESEN SIE DIE GESAMTE ANTWORT AKZEPTIERT.

public static int findFreq(String[] arr,char c) {
    Map<String,Integer> map  = new HashMap<String,Integer>();
    for(int i=0;i<arr.length;i++) {
        if(map.containsKey(arr[i])) 
            map.put(arr[i],map.get(arr[i])+1);
        else
            map.put(arr[i], 1);
    }
    int freq=0;
    for(Entry<String,Integer> entr:map.entrySet()) {
        String s = entr.getKey();
        for(int i=0;i<s.length();i++) {
            if(s.charAt(i)==c)
                freq += entr.getValue();
        }
    }
    return freq;
}
  • Zu sehen, wie Sie gehen, um zu schauen, jedes einzelne Zeichen in dem array zu lösen, wirst du nie besser als O(n). Ich sehe nicht, wie mache ich eine map von strings ist, all das hilfreich, (in der Tat brauchen Sie nicht die Karte, wenn Sie nie gehen, um zu schauen arr wieder). Wenn du ihn behalten willst, würd ich die Karte aus jedem Buchstaben im alphabet die Häufigkeit, mit der es Auftritt (d.h., h --> 3).
  • Berechnung des hashcode für einen string beinhaltet, an jeder Brief. Gewährt, dass der hashcode kann schon einmal berechnet (und daher zwischengespeichert), der zweite Ansatz ist potenziell erheblich mehr Arbeit und (im Durchschnitt) nicht weniger Arbeit. Es sind Einsparungen nur wenn die Zeichenfolge zählt, sind deutlich mehr als jeweils 1.
InformationsquelleAutor codewarrior | 2013-10-16
Schreibe einen Kommentar