日期:2014-05-20  浏览次数:20664 次

java编码实现一个字符串中出现最多字母的次数(只要求找出出现最多字母的次数,不需要找出具体字母)
如题,看有哪些实现方式更简便且效率高
------解决方案--------------------
先抛个:

        String s = "adfoweyirlkbasgxalueralsdhg"; // 待统计字符串
        int max = 0; // 记录最大出现次数
        int[] cnt = new int[127]; // 临时计数用的数组
        for (int i = 0; i < s.length(); i++) { // 循环字符以做统计
              char c = s.charAt(i); // 取出单个字母
              max = (++cnt[c] > max) ? cnt[c] : max; // 计数并检测最大出现次数
        }
        System.out.println (max);

------解决方案--------------------
想明白了,原来数组的索引可以用字符写哦,对应的是ASCII值,大神果然NB
------解决方案--------------------
引用:
先抛个:
Java code?12345678        String s = "adfoweyirlkbasgxalueralsdhg"; // 待统计字符串        int max = 0; // 记录最大出现次数        int[] cnt = new int[127]; // 临时计数用的数组        for (int i = 0; i <……

这个方法已经很给力了,效率非常高,唯一有点小瑕疵的就是数组空间有点浪费,127是提供给常用字符的,如果只是字母的话,就有点浪费。但是这个性能的消耗很小,无所谓了!

我在这边用HashMap实现一个吧,思路和1楼的差不多,只是能适用各种字符,各种数组,效率也蛮高的,不过效率上肯定没有1楼的高!(hashMap最快也要在数组索引上面,hash一把,和equal一把,所以效率肯定低于数组索引)
楼主参考参考:)


        String str = "jdsalfjaslnzdfuawoejlljafd";
        int max = 0;
        Map<Character, Integer> map = new HashMap<Character, Integer>(str.length());
        for(char chr : str.toCharArray()) {
            Integer i = map.get(chr);   
            int value = (i == null) ? 0 : i;  // 获取,没有则0,有则叠加
            map.put(chr, ++value);
            max = value > max ? value : max;  // 更新max
        }
        System.out.println(max);

------解决方案--------------------
上代码吧
String str = "afdbsodfusdfalgaufaowejhnlgjaouowejhgajgabcdefghijklmnopqrstuvwxyz,./?'????????????????????????????????????????";
int[] sum = new int[52];
int max = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 65 && c <= 90)//A~Z