题解 | #名字的漂亮度#

名字的漂亮度

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

import java.util.*;
import java.lang.*;

// 注意类名必须为 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
            int n = Integer.parseInt(in.nextLine());
            String[] ss = new String[n];
            int[] ssi= new int[n];//用来存放每个字符串最终要输出的值
            for(int i=0;i<n;i++){
                ss[i]=in.nextLine();//取所有的字符串放入数组
            } 
            //对每个字符串的最大漂亮度进行计算,思路:对字符串中的所有字母去重>对去重后的字符算出每个字符的个数>按照个数进行排序>个数最多的漂亮度设置为26,依次递减
            for(int i=0;i<n;i++){
                char[] css = ss[i].toCharArray();
                int[] cssi = new int[css.length];
                for(int c=0;c<css.length;c++){cssi[c]=(int)css[c];}
                int[] cssd = Arrays.stream(cssi).distinct().toArray();//字符串去重
                char[] cssdc = new char[cssd.length];
                for(int c=0;c<cssd.length;c++){cssdc[c]=(char)cssd[c];}
                int[] cno = new int[cssd.length];
                for(int f=0;f<cssdc.length;f++){//计算每个字符的个数
                    String sf = Character.toString(cssdc[f]);
                    cno[f]=ss[i].length()-ss[i].replaceAll(sf,"").length();
                }
                Arrays.sort(cno);//对字符个数排序
                int pl=26;
                for(int o=cno.length-1;o>=0;o--){
                    //每个字符的pl度*字符个数,累加得出整个字符串的pl度
                    ssi[i]+=(cno[o]*pl);
                    pl-=1;//个数最多的设为26,依次递减
                }
                
            }
            //输出
            Arrays.stream(ssi).forEach(i->System.out.println(i));
            
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务