题解 | #字符统计#
字符统计
http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
我的简单解体思路(依靠java语言特性,常用函数、哈希表):
1、接收输入字符串
2、字符串拆分字符数组
3、统计每个字符出现的频率(哈希表存储)
4、排序 (哈希表的value排序)
5、输出 (哈希表遍历)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
String str = s.nextLine();
char[] c = str.toCharArray();
HashMap<Character, Integer> hashMap = new HashMap<>();
// 统计字符出现的频率 保存到哈希表中
for(char c1: c){
if(hashMap.containsKey(c1)){
hashMap.put(c1, hashMap.get(c1)+1);
}else{
hashMap.put(c1, 1);
}
}
// 按哈希表中的Value进行排序
List<Map.Entry<Character,Integer>> list = new ArrayList<>(hashMap.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
if (o1.getValue() != o2.getValue()){
// value不同 比较value(注意升序还是降序)
return o2.getValue() - o1.getValue();
}else{
// value相同 比较key
return o1.getKey() - o2.getKey();
}
}
});
// 对排好序的结果进行输出
Iterator<Map.Entry<Character, Integer>> iter = list.iterator();
while(iter.hasNext()){
Map.Entry<Character, Integer> item = iter.next();
Character key = item.getKey();
System.out.print(key);
}
}
}
}
查看4道真题和解析