题目解析
本题主要考察自定义排序。
排序逻辑如下:
- 出现次数多的字母排在前面
- 出现次数一样的字母:
- 大写字母之间、小写字母之间,各自按照字典序升序
- 小写字母排在大写字母前面
主要难点在于实现:小写字母排在大写字母前面
因为小写字母的ASCII码值范围是:97~(97+26-1),大写字母的ASCII码值范围是:65~(65+26-1)
因此按照字典序来看,大写字母是排在小写字母之前的。
这里为了让小写字母排在大写字母之前,且小写字母之间字典序不变,我们可以将所有小写字母的ASCII码值-97,即小写字母码值范围变为 0~25,这样就能实现上面目的。
Java算法源码
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] s = sc.nextLine().toCha