题解 | #名字的漂亮度#
名字的漂亮度
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)); } } }