Ich werde die Unterschrift davon ausgehen, dass Sie wollen, ist:
public static List<CharFrequency> mostCommonChars(Set<String> dictionary)
Wo CharFrequency
Klasse ist definiert als:
class CharFrequency implements {
private char value;
private int count;
public CharFrequency(char v, int c) {
this.value = v;
this.count = c;
}
@Override
public String toString() {
return value + " -> " + count;
}
}
Und dann werden Sie die folgende Methode haben:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import java.util.stream.Collectors;
import java.util.function.Function;
public static List<CharFrequency> mostCommonChars(Set<String> dictionary) {
// Concat all strings present in dictionary into a big string
String allchars = dictionary.stream().collect(Collectors.joining());
// Then convert it to a List<Character> which can use Java Streams
List<Character> charList = new ArrayList<>(allchars.length());
for (char c : allchars.toCharArray()) {
charList.add(c);
}
final List<CharFrequency> result = new ArrayList<>();
charList.stream()
// Group by the char itself and count occurrences
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.forEach((character, count1) -> result.add(new CharFrequency(character, count1)));
return result;
}
Das ist nicht sehr effizient und ich habe es geschrieben, ohne verschiedene Eingaben auszuprobieren, aber es könnte als Start für Sie dienen.
Nach Signatur Ihrer Methode ist es soll nur eine einzige 'char' zurückzukehren. Aus dem Namen der Methode würde ich erraten, dass die Methode das Zeichen mit den meisten Vorkommen in Strings in 'dictionary' zurückgeben soll ?! – dpr
Ja, bitte klären Sie, was Sie von dieser Methode erwarten. – totoro
Vielen Dank für Ihre Antworten. Entschuldigung für Unklarheiten. Die Methode soll jedes Zeichen zurückgeben, das in der Zeichenfolge s gefunden wird, und die Anzahl der Zeichen aufzeichnen. Zum Beispiel würde AABBBCDD A (2) B (3) C (1) D (2) zurückgeben. Ich nehme an, der beste Weg, dies zu tun ist, jedes Vorkommen zu einem Array hinzuzufügen, erreicht dies durch die Iteration über ein Hashset verwirrend mich (HINWEIS - die Kursrichtungen schlagen vor, das for (string s: dictionary) zu verwenden – Ryan