33:字符统计SumOfCharactors

题目描述:如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口:

    输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)

    按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出

    清空目前的统计结果,重新统计

调用者会保证:

输入的字符串以‘\0’结尾。

输入描述:输入一串字符。

输出描述:对字符中的各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

输入例子:

aadddccddc

输出例子:

dca

 思路:1:ascii表从0到127,一共128个,一个int[]数组,下表存放字符对应的ascii值,数组值存放该字符出现的次数,

2:用一个max统计当前数组出现次数最多的字符出现的个数

3:用max循环,从大到小输出字符

 

 1 package huawei2;
 2 
 3 import java.util.Collection;
 4 import java.util.Collections;
 5 import java.util.Iterator;
 6 import java.util.LinkedHashMap;
 7 import java.util.Map;
 8 import java.util.Map.Entry;
 9 import java.util.Scanner;
10 
11 /*题目描述:如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
12 实现以下接口:
13     输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
14     按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
15     清空目前的统计结果,重新统计
16 调用者会保证:
17 输入的字符串以‘\0’结尾。
18 输入描述:输入一串字符。
19 输出描述:对字符中的各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
20 输入例子:
21 aadddccddc
22 输出例子:
23 dca*/
24 public class SumOfCharactors {
25 
26     public static void main(String[] args) {
27         Scanner in = new Scanner(System.in);
28         while(in.hasNext())
29         {
30             String input = in.nextLine();
31             int array[] = new int[128];
32             //初始化存放ascii码的数组,下表ascii,value出现的次数
33             for(int i = 0;i<array.length;i++ )
34             {
35                 array[i] = 0;
36             }
37             //统计各个字符(转换成ascii出现的次数)
38             for(int j = 0; j<input.length(); j++)
39             {
40                 array[input.charAt(j)]++;
41                 //array[(int)input.charAt(j)]++;
42             }
43             int max = 0;//max表示数组中当前出现次数最多元素的次数
44             //寻找出现次数最多元素的个数
45             for(int j = 0; j< array.length;j++)
46             {
47                 if(array[j] > max)
48                 {
49                     max = array[j];
50                 }
51             }
52             //按照出现次数依次输出
53             while(max!=0)
54             {
55                 for(int i = 0; i<array.length; i++)
56                 {
57                     if(max == array[i])
58                         System.out.print((char)i);
59                 }
60                 max--;
61             }
62             //char[] array = input.toCharArray();
63             //Map<Character, Integer> map = new LinkedHashMap<>();
64 //            Iterator<Entry<Character, Integer>> iterator = map.entrySet().iterator();
65 //            while(iterator.hasNext()){}
66             
67             
68         }
69     }
70 
71 }
72 /*测试用例:
73 8v26ktzk069lm400061m0v965we88850o6omqi532ktir6esb55t0kqm026y8rk63aj82kcx48gd1tiylvs0xo32zem65q7z5ce2185d2ascz62a2p3ajr45h637t2p290lc043gicp5ldzzmx2
74 对应输出应该为:
75 206583kmzct4aeil19dopqrsvx7gjybhw
76 你的输出为:
77 206583kmzct4aeil19dopqrsvx7gjybhw0751462839jcybodpnwxzikmfehluagtqrsv*/

可能循环处理输出出错,输出容器没有清理干净

posted @ 2016-08-27 14:06  sunshinelym  阅读(588)  评论(0编辑  收藏  举报