Итак, я создаю дерево huffman, и мне нужно взять строку в качестве входных данных, а затем создать 2 массива, содержащих каждую букву, и количество вхождений этой буквы в исходной строке , как это:Ввод числа и удаление дубликатов из строки
String s = "mississippi"
Если в результате:
char[] charArr = {'m','i', 's', 'p'};
int[] count = {1,4,4,2};
Есть много вопрос относительно этого и много примеров о том, как решить эту проблему, особенно здесь, на StackOverflow, но только тот, который мне удалось чтобы получить работу:
private void findOccurences(String s) {
List<Character> original = new ArrayList<Character>(s.length());
List<Character> duplicateRemoved;
for (int i = 0; i < s.length(); i++) {
original.add(s.charAt(i));
}
duplicateRemoved = new ArrayList<Character>(original);
// Remove duplicates from second list.
Set<Character> hs = new HashSet<Character>();
hs.addAll(duplicateRemoved);
duplicateRemoved.clear();
duplicateRemoved.addAll(hs);
charFreqs = new int[duplicateRemoved.size()];
charArr = new char[duplicateRemoved.size()];
for (int i = 0; i < charArr.length; i++) {
char c = duplicateRemoved.get(i);
int count = Collections.frequency(original, c);
charArr[i] = c;
charFreqs[i] = count;
}
}
Но он чувствует себя очень мелким камнем, а также строит порядок букв в массиве. Если я воспользуюсь этой результирующей решеткой, это будет следующим:
char[] charArr = {'p','s', 'i', 'm'};
Есть ли лучший способ сделать то, что я хочу?
Используйте HashMap и попробовать, если это соответствует вашему требованию. –