当前位置: 代码迷 >> J2EE >> 程序题求解!该怎么解决
  详细解决方案

程序题求解!该怎么解决

热度:92   发布时间:2016-04-22 02:16:21.0
程序题求解!
统计字符串“ahadcdffhacha”中每个字符出现了多少次,按次数排序并输出
例如:c:1,e:2,d:2,f:2,b:3,a:4。

------解决方案--------------------
没有任何优化的实现:
Java code
    public static void main(String[] args) {        String str = "ahadcdffhachaasdfaweadbastawetaesartaw";        // 准备        char[] cTarget = str.toLowerCase().toCharArray(); // 转为char数组        int[] cnts = new int[26]; // 计数器        // 检索        for (char c : cTarget) {            cnts[c - 'a']++;        }        // 排序前准备下用于记录位置的数组        char[] cs = new char[26];        for (char i = 0; i < cs.length; i++) {            cs[i] = (char) ('a' + i);        }        // 排序        for (int i = 0; i < cnts.length; i++) {            for (int j = i + 1; j < cs.length; j++) {                if (cnts[j] < cnts[i]) {                    int a = cnts[j];                    cnts[j] = cnts[i];                    cnts[i] = a;                    char c = cs[j];                    cs[j] = cs[i];                    cs[i] = c;                }            }        }        // 最后输出        for (int i = 0; i < cs.length; i++) {            if (cnts[i] > 0) {                System.out.println(cs[i] + ":" + cnts[i] + "\t");            }        }    }
------解决方案--------------------
期待更短的。。。

Java code
String str = "ahadcdffhacha";        Map map = new HashMap();        for(int i = 0;i < str.length();i++)        {            if(map.containsKey(str.charAt(i)))            {                map.put(str.charAt(i), Integer.parseInt(map.get(str.charAt(i)).toString())+1);            }            else            {                map.put(str.charAt(i), 1);            }        }                List list = new ArrayList();        Set set = map.entrySet();        for(Iterator i = set.iterator();i.hasNext();)        {            Map.Entry entry = (Map.Entry)i.next();            list.add(entry);        }                Collections.sort(list,new Comparator()        {            public int compare(Object o1, Object o2) {                Map.Entry e1 = (Map.Entry)o1;                Map.Entry e2 = (Map.Entry)o2;                return Integer.parseInt(e1.getValue().toString())-Integer.parseInt(e2.getValue().toString());            }        });        System.out.println(list);
  相关解决方案