统计事件并删除字符串中的重复项
问题描述:
因此,我构建了一个huffman树,并且需要将字符串作为输入,然后创建2个数组,其中包含每个字母以及该字母在原始字符串中的出现次数,像这样:统计事件并删除字符串中的重复项
String s = "mississippi"
应导致:
char[] charArr = {'m','i', 's', 'p'};
int[] count = {1,4,4,2};
有关于这一点,并就如何解决这方面的例子很多很多的问题,尤其是这里的计算器,但我管理的唯一一个去工作是这样的:
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'};
有没有更好的方法来做我想要的?
答
我会做这种方式
String s = "mississippi";
List<String> original = Arrays.stream(s.split(""))
.collect(Collectors.toList());
List<String> duplicateRemoved = Arrays.stream(s.split(""))
.distinct()
.collect(Collectors.toList());
ArrayList<Integer> Occurrences = new ArrayList<>();
int counter = 1;
for (String aList : duplicateRemoved) {
counter = (int) original.stream().filter(s1 -> s1.equals(aList)).count();
Occurrences.add(counter);
}
System.out.println(duplicateRemoved);
System.out.println(Occurrences);
和输出
使用HashMap和尝试,如果它适合你的需求。 –