题解 | #字符统计#
字符统计
http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
//key:字符 value:个数
//对map的value值进行排序,降序
//方法1:将map放到流中,定义排序规则
//方法2:将map放到list中,定义排序规则
//将排序后的key值输出
//注意:如果统计的个数相同,则按照ASCII码由小到大排序输出。
//想法:先用TreeMap,按照ascll码排序,
// 这样最后对value排序时,相同value按照ascll排序
//set
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
for (int i = 0; i < s.length(); i++) {
tm.put(s.charAt(i), tm.getOrDefault(s.charAt(i), 0) + 1);
}//for_i
Map<Character, Integer> tm2 = new LinkedHashMap<Character, Integer>();
//此处必须是LinkedHashMap,因为hashmap插入元素是无序的(.put函数),
//希望排序后,按顺序插入哈希表
tm.entrySet().stream().sorted( (o1, o2) -> o2.getValue().compareTo(o1.getValue()) ).forEach(user -> {
tm2.put(user.getKey(), user.getValue());
});
for(char key:tm2.keySet()){
System.out.print(key);
}
}//main
}//Main
//方法2
// import java.util.*;
// public class Main {
// public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
// String s = in.nextLine();
// TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
// for (int i = 0; i < s.length(); i++) {
// tm.put(s.charAt(i), tm.getOrDefault(s.charAt(i), 0) + 1);
// }//for_i
// ArrayList<Map.Entry> list = new ArrayList<>( tm.entrySet() );
// Collections.sort(list, new Comparator<Map.Entry>() {
// public int compare(Map.Entry o1, Map.Entry o2) {
// return (int) (o2.getValue()) - (int)( o1.getValue() );
// }//compare
// }//Comparator
// );
// for (Map.Entry e : list) {
// System.out.print(e.getKey());
// }
// }//main
// }//Main
//对map的value值进行排序,降序
//方法1:将map放到流中,定义排序规则
//方法2:将map放到list中,定义排序规则
//将排序后的key值输出
//注意:如果统计的个数相同,则按照ASCII码由小到大排序输出。
//想法:先用TreeMap,按照ascll码排序,
// 这样最后对value排序时,相同value按照ascll排序
//set
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
for (int i = 0; i < s.length(); i++) {
tm.put(s.charAt(i), tm.getOrDefault(s.charAt(i), 0) + 1);
}//for_i
Map<Character, Integer> tm2 = new LinkedHashMap<Character, Integer>();
//此处必须是LinkedHashMap,因为hashmap插入元素是无序的(.put函数),
//希望排序后,按顺序插入哈希表
tm.entrySet().stream().sorted( (o1, o2) -> o2.getValue().compareTo(o1.getValue()) ).forEach(user -> {
tm2.put(user.getKey(), user.getValue());
});
for(char key:tm2.keySet()){
System.out.print(key);
}
}//main
}//Main
//方法2
// import java.util.*;
// public class Main {
// public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
// String s = in.nextLine();
// TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
// for (int i = 0; i < s.length(); i++) {
// tm.put(s.charAt(i), tm.getOrDefault(s.charAt(i), 0) + 1);
// }//for_i
// ArrayList<Map.Entry> list = new ArrayList<>( tm.entrySet() );
// Collections.sort(list, new Comparator<Map.Entry>() {
// public int compare(Map.Entry o1, Map.Entry o2) {
// return (int) (o2.getValue()) - (int)( o1.getValue() );
// }//compare
// }//Comparator
// );
// for (Map.Entry e : list) {
// System.out.print(e.getKey());
// }
// }//main
// }//Main