字符统计

字符统计

http://www.nowcoder.com/questionTerminal/c1f9561de1e240099bdb904765da9ad0

解本题总共分三步
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;
    }
}
全部评论
数组的长度为什么要大于128?
2 回复 分享
发布于 2022-08-09 22:18
使用数组的关键好处就是它是从小到大升序的,哪怕对应字符数相同,小字符也会先打印。
2 回复 分享
发布于 2023-01-16 21:30 陕西
条理清晰,有理有据,使人信服
点赞 回复 分享
发布于 2022-08-10 15:43
这个思路比较新颖
点赞 回复 分享
发布于 2023-02-19 00:04 广东
这句妙啊"(本题无需考虑字符个数相同的情况,因为字符ascll码对应的整型数组本来就是排好的)" 另外 数组长度不需要128吧,int len = 'z'-'0';应该就行了
点赞 回复 分享
发布于 2023-03-10 21:28 广东
实际上计算各字符出现次数和求最大出现频次可以写在一个循环里的
点赞 回复 分享
发布于 08-19 13:47 湖北
使用了位图的思想
点赞 回复 分享
发布于 10-12 10:39 北京

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
09-27 10:54
重庆大学 C++
人已微死:致敬传奇耐测王。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
72 5 评论
分享
牛客网
牛客企业服务