题目描述
如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1:
输入:
aadddccddc
输出:
dca
代码
自己花了一小时写了个垃圾的代码,用的hashmap,没通过,于是去刷题解,题解大佬多,给出了各种通过的代码。
下面展示一些 内联代码片
。
import java.util.*;
class Pair implements Comparable<Pair>{
private int value;
private int times;
public Pair(int value, int times) {
this.value = value;
this.times = times;
}
public int compareTo(Pair that) {
if (this.times == that.times) {
return this.value - that.value;
}
return that.times - this.times;
}
public char get() {
return (char)value;
}
}
public class Main {
private final int N = 127;
public Main() {
}
public String count(String str) {
int[] arr = new int[N];
for (char ch : str.toCharArray()) {
if (ch >= N) continue;
arr[ch]++;
}
PriorityQueue<Pair> pq = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
if (arr[i] != 0) {
pq.offer(new Pair(i, arr[i]));
}
}
StringBuilder res = new StringBuilder();
while (!pq.isEmpty()) {
res.append(pq.poll().get());
}
return res.toString();
}
public static void main(String[] args) {
Main solution = new Main();
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String str = in.nextLine();
String res = solution.count(str);
System.out.println(res);
}
}
}
还有一个代码,
package HuaWei;
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.util.*;
//public class zifuchuantongji102 {
//
// public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// String s = sc.nextLine();
//
// System.out.println(robot(s));
//
// }
//
// public static String robot(String ss){
//
// int m = ss.length();
// String sss;
// Map<Character,Integer> map = new HashMap<Character,Integer>();
// List<Map.Entry<Character,Integer>> list = new ArrayList<>();
//
// int i=0;
// while(i<m){
// map.put(ss.charAt(i),map.getOrDefault(ss.charAt(i),0)+1);
// i++;
// }
//
// for(Map.Entry<Character,Integer> entry:map.entrySet()){
// list.add(entry);
// }
//
// list.sort(new Comparator<Map.Entry<Character, Integer>>(){
// @Override
// public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
// return o1.getValue()-o2.getValue();
// }
// });
//
// StringBuilder sb = new StringBuilder();
// for (Character key : map.keySet()) {
// sb.append(key);
// }
// sss=sb.toString();
//
// String reverse = new StringBuffer(sss).reverse().toString();
//
// return reverse;
//
// }
//}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class zifuchuantongji102{
public static void main(String[] args)
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str;
try{
while((str=br.readLine())!=null)
{
System.out.println(count(str).toString());
}
}catch(IOException e){
e.printStackTrace();
}
}
public static StringBuilder count(String str)
{
char[] strArray=str.toCharArray();
int[] chArray=new int[129];
//字符对应ascll码值下标元素自增来统计数量
for(char i:strArray)
chArray[(int)i]++;
int max=0;
//找出字符数量最多的ascll码值
for(int i=0;i<chArray.length;i++)
if(max<chArray[i])
max=chArray[i];
StringBuilder sb=new StringBuilder();
//按数量从大到小添加到可变字符序列sb
while(max!=0)
{
for(int i=0;i<chArray.length;i++)
if(chArray[i]==max)
sb.append((char)i);
max--;
}
return sb;
}
}