题解 | #字符统计#
字符统计
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);
}
}
}
}
}
}
华为机试题解 文章被收录于专栏
华为机试题解

查看1道真题和解析