java统计出现次数并从字符串中删除重复项
因此,我正在构建一个哈夫曼树,需要将一个字符串作为输入,然后创建两个数组,其中包含每个字母以及该字母在原始字符串中出现的次数,如下所示:
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'};
有没有更好的方法来做我想做的事
# 1 楼答案
我会这样做的
以及输出