题解 | #名字的漂亮度#

名字的漂亮度

http://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3

Java解法

基本思路

  1. 使用map将字符和它的出现次数对应起来
  2. 再将values全部取出形成单独的list,进行倒序排序
  3. 从26开始递减,相乘即可

一些要注意的操作

  1. 实现对于已存在的Key,直接将它原本的key加一

    map.put(c,map.get(c)+1);
    
  2. map的values直接取出是Collection类型,直接强转成list会出错,可以采用如下方法:

    List<Integer> list = new ArrayList<>(map.values());
    
  3. 对List进行升序排序可使用Collections,倒序排序再reverse一下即可

    Collections.sort(list); //升序
    Collections.reverse(list); //倒序需要再加这一句
    
  4. 对数组进行排序使用Arrays,而不是Collections

    int[] a = new int[5];
    Arrays.sort(a); //升序
    
  5. 字符进行变换大小写的操作时,要通过Character,但注意不是直接就改变了,而是作为返回值返回了

    Character.toLowerCase(c); //这句话执行后,c还是原来的c
    c = Character.toLowerCase(c); //必须接收返回值,并赋值给c,才可以改变c
    

题解

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for(int i=0;i<n;i++){
            String s = in.next();
            char[] cs = s.toCharArray();
            Map<Character,Integer> map = new HashMap<>();
            for(char c:cs){
                if(!map.containsKey(c)){
                    map.put(c,1);
                }else{
                    map.put(c,map.get(c)+1);
                }
            }
            List<Integer> list = new ArrayList<>(map.values());
            Collections.sort(list);
            Collections.reverse(list);
            //System.out.println(list);
            int sum=0;
            for(int j=26,k=0;j>=1&&k<list.size();j--,k++){
                sum += j*(list.get(k));
            }
            System.out.println(sum);
        }
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务