单词词频统计降序排序(代码贴)
题目:
如题:输入一个单词(全英文的字符串,区分大小写字母),统计每个字母出现的次数,并按降序排序输出。
思路:
用一个hashmap,key是字母,value是该字母出现的次数。从头扫描字符串,如果当前字母在map中存在,则出现次数加一;否则出现次数设置为1。
Solution.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 单词词频统计,降序排序
* 核心就是对HashMap的排序
* @author lijialin
*
*/
public class Solution {
public static void solution(String s) {
// Step1 将单词的字母统计到HashMap中
HashMap<Character, Integer> map = new HashMap();
int len = s.length();
for(int i = 0; i < len; i++) {
char c = s.charAt(i);
if(map.containsKey(c)) {
map.put(c, map.get(c) + 1);
}else {
map.put(c, 1);
}
}
// Step2 排序
List<Map.Entry<Character, Integer>> list =
new ArrayList<Map.Entry<Character, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1,
Map.Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
// Step3 输出
for(Map.Entry<Character, Integer> entry : list) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static void main(String[] args) {
// Test Case
String testcase = "abcdabcdaaabbcd";
solution(testcase);
}
}
运行结果: