描述 | |
---|---|
知识点 | 字符串,排序 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 |
输入一串字符。 |
输出 |
对字符中的 |
样例输入 | aadddccddc |
样例输出 | dca |
/*字符统计:
* 1、统计输入字符串中的英文字符(区分大小写)、数字和空格个数
* 2、按照统计个数由大到小输出
* 3、当个数相同时,按照ASII码由小到大输出
*
* 下面的解题思路是:
* 1、先用map表收集数据,字符作为key,字符的个数作为value
* 2、由于map没有compare()方法,将map转换为list集合,使用集合中的compare()方法
* 3、重写compare()方法,按照value值的大小排序,当value值相同时,根据key的值排序
* 4、输出key值
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
count(input);
scanner.close();
}
private static void count(String input) {
Map<Character, Integer> hashMap = new HashMap<>();
for (int i = 0; i < input.length(); i++) {//遍历字符串,当为英文字母、数字和空格时收集
if ((input.charAt(i) >= 'a' && input.charAt(i) <= 'z')
|| (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z')
|| input.charAt(i) == ' '
|| (input.charAt(i) >= '0' && input.charAt(i) <= '9')) {
if (hashMap.containsKey(input.charAt(i))) {//如果之前已经有该字符,则将其对应的value值+1
int temp = hashMap.get(input.charAt(i));
temp++;
hashMap.put(input.charAt(i), temp);
} else {
hashMap.put(input.charAt(i), 1);//如果之前没有收集该字符,则收集,并将value置1
}
}
}
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(
hashMap.entrySet());//将map转换为list集合
Collections.sort(list,new valuesSort());//将list排序
for(int i = 0; i < list.size(); i++){ //遍历list,输出key值
System.out.print(list.get(i).getKey());
}
}
}
class valuesSort implements Comparator<Map.Entry<Character, Integer>> {
@Override
public int compare(Map.Entry<Character, Integer> o1, //重写compare方法
Map.Entry<Character, Integer> o2) {
// TODO Auto-generated method stub
if ((o2.getValue() - o1.getValue()) > 0)
return 1;
else if ((o2.getValue() - o1.getValue()) == 0
&& o2.getKey() - o1.getKey() < 0)
return 1;
else
return -1;
}
}