题解 | #字符统计#
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
这道题比较重要, 所以做一下笔记
题目的要求就是从大到小的稳定排序
所以定一个二维数组, 第一列表示各个字符的下标, 第二列表示各个字符的个数
然后调用arrays.sort()方法实现稳定排序
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext())
        { // 注意 while 处理多个 case
            String str = in.nextLine();
            int [][]arr = new int[36][2];
            for (int i = 0; i < 36; i++)
            {
                arr[i][0] = i;
                arr[i][1] = 0;
            }
            for (int i = 0; i < str.length() ; i++)
            {
                char ch = str.charAt(i);
                if(Character.isLetter(ch))
                {
                    int index = ch - 'a'+10;
                    arr[index][1]++;
                }
                else
                {
                    int index = ch - '0';
                    arr[index][1]++;
                }
            }
            Arrays.sort(arr, new Comparator<int[]>()
            {
                @Override
                public int compare(int[] o1, int[] o2)
                {
                    return o2[1] - o1[1];
                }
            });
            for (int i = 0; i < 36; i++)
            {
                if(arr[i][1] != 0)
                {
                    int index = arr[i][0];
                    if( index <10 )
                    {
                        int k = arr[i][0] +'0';
                        char ch = (char) (  k) ;
                        System.out.print(ch);
                    }
                    else
                    {
                        int k = arr[i][0] +'a'-10;
                        char ch = (char) (  k) ;
                        System.out.print(ch);
                    }
                }
            }
        }
    }
}
华为机试题解 文章被收录于专栏
 华为机试题解


查看12道真题和解析