题目描述
如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘ ’结尾。
输入描述:
输入一串字符。
输出描述:
对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1
输出
dca
思路:
1.将字符串转换成字符数组。创建字符ascll码对应的整型数组,该数组长度必须大于128,字符的ascll码值就是该数组的下标,遍历字符数组,字符每出现一次对应ascll下标的整数就加一。
2.找出该整型数组的最大值。
3.在整型数组中匹配max,找到则将该整数下标对应的字符加入可变字符序列,max自减直至max为零。(本题无需考虑字符个数相同的情况,因为字符ascll码对应的整型数组本来就是排好的)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ 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; } }