输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出(本题含有多组样例输入)。
输入描述:
一个只包含小写英文字母和数字的字符串。
输出描述:
一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。
示例:
输入
aaddccdc
1b1bbbbbbbbb
输出
cda
b1
说明:
第一个样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
List<String> list = new ArrayList<>();
while(scan.hasNext()){
list.add(getCount(scan.nextLine()));
}
for(String s : list){
System.out.println(s);
}
}
private static String getCount(String str){
//字符对应ASCII码值下标元素自增来统计数量
int[] arr = new int[123];
for (char c : str.toCharArray()) {
arr[c]++;
}
//找出字符数量最多的ASCII码值
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
StringBuffer sb = new StringBuffer();
//按数量从大到小添加到可变字符序列sb
while (max != 0) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == max) {
sb.append((char)i);
}
}
max--;
}
return sb.toString();
}
}