首页 > 试题广场 >

名字的漂亮度

[编程题]名字的漂亮度
  • 热度指数:142718 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个字符串,计算每个字符串最大可能的“漂亮度”。

本题含有多组数据。

数据范围:输入的名字长度满足



输入描述:

第一行一个整数N,接下来N行每行一个字符串



输出描述:

每个字符串可能的最大漂亮程度

示例1

输入

2
zhangsan
lisi

输出

192
101

说明

对于样例lisi,让i的漂亮度为26,l的漂亮度为25,s的漂亮度为24,lisi的漂亮度为25+26+24+26=101.   
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);
        //默认26个字符累计,排序后对26个字符分别赋值计算,累计最终结果
        int n = in.nextInt();
        String[] str = new String[n];
        int[][] a = new int[n][26];
        int[] b = new int[n];
        for(int i=0;i<n;i++){
            str[i]=in.next();
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<str[i].length();j++){
              a[i][str[i].charAt(j)-97] = a[i][str[i].charAt(j)-97]+1;
            }
            Arrays.sort(a[i]);
        }
        for(int i=0;i<n;i++){
            int t = 1;
            for(int j=0;j<26;j++){
                b[i]=b[i]+a[i][j]*t;
                t++;
            }
        }
        for(int i=0;i<n;i++){
            System.out.println(b[i]);
        }
    }
}
编辑于 2024-04-23 11:50:37 回复(0)
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.hasNextLine()) { // 注意 while 处理多个 case
            int num = Integer.valueOf(in.nextLine());
            for(int i= 0;i< num;i++){
                String s = in.nextLine();
                Map<Character,Integer> map =  new HashMap<>();
                for(int j = 0;j< s.length();j++){
                    char c = s.charAt(j);
                    map.put(c,map.getOrDefault(c,0)+1);
                }
                List<Integer> sortList = new ArrayList();
                for(Map.Entry<Character,Integer> entrySet: map.entrySet()){
                    sortList.add(entrySet.getValue());
                }
                //降序排序
                Collections.sort(sortList,Collections.reverseOrder());
                int count = 26;
                int res = 0;
                for(Integer sort : sortList){
                    res += sort*count;
                    count--;
                }
                System.out.println(res);
            }

        }
    }
}

编辑于 2024-01-22 14:25:57 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        while (n-- > 0) {
            char [] chars = in.nextLine().toCharArray();
            int [] a = new int[26];
            for (int i = 0; i < chars.length; i++) {
                a[chars[i] - 'a']++;
            }
            Arrays.sort(a);
            int sum = 0;
            for (int i = 0; i < a.length; i++) {
                sum += a[i] * (i + 1);
            }
            System.out.println(sum);
        }
    }
}

发表于 2023-11-24 22:14:24 回复(0)
import java.util.Scanner;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            in.nextLine();
            for (int i = 0; i < n; i++) {
                String str = in.nextLine();
                Map<Character, Integer> map = new HashMap<>();
                for (char c : str.toCharArray()) {
                    map.put(c, map.getOrDefault(c, 0)+1);
                }
                Collection<Integer> c = map.values();
                Object[] arr = c.toArray();
                Arrays.sort(arr, Collections.reverseOrder());
                int val = 0;
                int init = 26;
                for (Object o : arr) {
                    val += (int)o * init;
                    init--;
                }
                System.out.println(val);
            }
        }
    }
}

发表于 2023-11-10 10:48:48 回复(0)
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        // 输入的字符串个数
        int n = Integer.parseInt(line);
        ArrayList<String> list = new ArrayList<>();
        // 存储输入的字符串
        for (int i = 0; i < n; i++) {
            list.add(br.readLine());
        }

        for (int i = 0; i < list.size(); i++) {
            // 计算每个字符串中每个字符出现的次数
            HashMap<Character, Integer> map = new HashMap<>();
            String s = list.get(i);

            for (int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                map.put(c, map.getOrDefault(c, 0) + 1);
            }

            // 排序
            Collection<Integer> values = map.values();
            ArrayList<Integer> list1 = new ArrayList<>(values);
            // 字符出现次数排序,降序排列
            Collections.sort(list1, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2.compareTo(o1);
                }
            });

            // 计算漂亮分
            int sum = 0;
            int score = 26;
            for (int j = 0; j < list1.size(); j++) {
                sum += score * list1.get(j);
                score--;
            }
            System.out.println(sum);

        }
    }
}

发表于 2023-08-10 08:45:24 回复(0)
import java.util.Arrays;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
            int n=in.nextInt();
            int index=0;
            for(int i=0;i<n;i++)
            {
                String str=in.next();
                int count=26;
                int [] core=new int[128];
                for(int j=0;j<str.length();j++)
                {
                    core[str.charAt(j)]++;
                }
                Arrays.sort(core);
                for(int x=127;x>0;x--)
                {
                    if(core[x]==0)break;
                    index+=count*core[x];
                    count--;  
                }
                System.out.println(index);
                index=0;

            }

    }
}
//有没有可能数组就可以了
发表于 2023-07-10 16:54:23 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        //思路;用HashMap保存每个字母出现的次数,然后对其根据次数从大到小进行漂亮度从大到小进行累计
        //最后将每行字符串的真正情况保存到result
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n=Integer.valueOf(in.nextLine());
        ArrayList<String> list=new ArrayList<>();
        for(int i=0;i<n;i++){
            list.add(in.nextLine());
        }
        //保存计算结果
        ArrayList<Integer> result=new ArrayList<>();
        for(int i=0;i<list.size();i++){
            //保存出现的次数
            HashMap<Character,Integer> map=new HashMap<>();
            //遍历添加当前行字符串的字符出现次数添加到map
            for(int j=0;j<list.get(i).length();j++){
                Character c=list.get(i).charAt(j);
                if(map.get(c)==null||map.get(c)==0){
                    map.put(c,1);
                }else{
                    map.put(c,map.get(c)+1);
                }
            }
            //获取漂亮度
            result.add(getResult(map));
        }
        for(int i=0;i<result.size();i++){
            System.out.println(result.get(i));
        }
    }
    public static int  getResult(HashMap<Character,Integer> map){
        //将每个字符出现次数保存到list,进行排序,然后根据次数对漂亮都进行计算
        ArrayList<Integer> list=new ArrayList<>();
        for(Character c:map.keySet()){
            int sum=map.get(c);
            list.add(sum);
        }
        //排序:顺序
        Collections.sort(list);
        int sum=0;
        int index=list.size()-1;
        //计算漂亮都
        for(int i=26;i>26-list.size();i--){
            sum+=i*list.get(index);
            index--;
        }
        return sum;
    }
}

发表于 2023-05-30 10:41:30 回复(0)
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            for (int i = 0; i < n; i++) {
                String str = in.next();
                char[] strs = str.toCharArray();
                TreeMap<Character, Integer> treeMap = new TreeMap<Character, Integer>();
                for (int j = 0; j < strs.length; j++) {
                    if (treeMap.containsKey(strs[j])) {
                        treeMap.put(strs[j],treeMap.get(strs[j])+1);
                    }else{
                        treeMap.put(strs[j],1);
                    }
                }
   
                List<Map.Entry<Character,Integer>> list = new ArrayList<Map.Entry<Character,Integer>>();
                list.addAll(treeMap.entrySet());
                list.sort(new Comparator<Map.Entry<Character,Integer>>(){
                    @Override
                    public int compare(Map.Entry<Character,Integer> o1,Map.Entry<Character,Integer> o2){
                    return o2.getValue() - o1.getValue();
                    }
                });
     
                int total = 0;
                int index = 26;
                for(int j=0;j<list.size();j++){
                   int num = list.get(j).getValue();//从多到少的字母个数
                   total += num*index;
                   index--;
                }
                System.out.println(total);
            }        
        }
    }
发表于 2023-04-19 00:43:14 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNext 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int total = in.nextInt();
            for (int i = 0; i < total; i++) {
                String s = in.next();
                // 全部转换成小写
                s = s.toLowerCase();
                // 定义一个字母数组,
                int[] letters = new int[26];
                char[] arr = s.toCharArray();
                for (int k = 0; k < arr.length; k++) {
                    letters[arr[k] - 'a'] += 1;
                }
                Arrays.sort(letters);
                int res = 0;
                int curScore = 26;
                for (int k = 25; k >= 0; k--) {
                    if (letters[k] != 0) {
                        res += letters[k] * curScore;
                        curScore--;
                    }
                }
                System.out.println(res);
            }
        }
    }
}

发表于 2023-03-19 16:40:16 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别

        int num = Integer.parseInt(in.nextLine());
        for (int i = 0; i < num; i++) {
            String str = in.nextLine();
            int[] a =  new int[26];
            int j = 0;
            while (!"".equals(str)) {
                String temp  = str.replace(String.valueOf(str.charAt(0)), "");
                a[j] = str.length() - temp.length();
                str = temp;
                j++;

            }
            Arrays.sort(a);
            int beautiful = 0;
            for (int k = a.length - 1; k >= 0; k--) {
                beautiful += a[k] * (k + 1);
            }
            System.out.println(beautiful);
        }


    }
}

发表于 2023-03-05 14:22:18 回复(0)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 单词个数
        int count = in.nextInt();
        for (int i = 0; i < count; i++) {
            countBeautiful(in.next());
        }
    }

    private static void countBeautiful(String inputStr) {
        // 统计字符串个数
        List<Integer> countList = new ArrayList<>();
        char[] chars = inputStr.toCharArray();
        int startLen = inputStr.length();
        Map<Character, Boolean> map = new HashMap<Character, Boolean>();
        for (char c : chars) {
            int replaceLen = inputStr.replace(String.valueOf(c), "").length();
            int countLen = startLen - replaceLen;
            if (countLen != 0 && !map.containsKey(c)) {
                // 为了防止单个字母重复统计
                map.put(c, true);
                countList.add(countLen);
            }
        }
        // 降序排列
        Collections.sort(countList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        int beautiful = 0;
        for (int i = 0; i < countList.size(); i++) {
            // 最多的个数字符串漂亮度为26,其他依次递减
            beautiful += (26 - i) * countList.get(i);
        }
        System.out.println(beautiful);
    }
}

发表于 2023-02-15 22:47:36 回复(0)
理解错了题目意思,还以为分配完字符漂亮度之后,采用统一的漂亮度保证第一行字符串和第N行字符串同时都取得最大漂亮度
发表于 2023-02-13 18:40:43 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int a = in.nextInt();
        for (int i = 0; i < a; i++) {
            List<Character> chars = new LinkedList<>();
            List<Integer> ints = new LinkedList<>();
            String b = in.next();
            b = b.toLowerCase();
            for (int j = 0; j < b.length(); j++) {
                if (chars.contains(b.charAt(j))) {
                    int index = chars.indexOf(b.charAt(j));
                    int c = ints.get(index);
                    c++;
                    ints.set(index, c);
                    continue;
                }
                chars.add(b.charAt(j));
                ints.add(1);
            }
            Collections.sort(ints);
            int d = 26;
            int total = 0;
            for (int z = ints.size() - 1; z >= 0; z--) {
                total += (ints.get(z) * (d--));
            }
            System.out.println(total);
        }

    }
}

发表于 2023-01-07 01:22:25 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        String[] strS = new String[num];
        for (int i = 0; i < num; i++) {
            strS[i] = br.readLine();
        }
        for (String str : strS) {
            int num2 = beautiful(str);
            System.out.println(num2);
        }
    }
    public static int beautiful(String str){
        int len = str.length();
        HashMap<Character, Integer> hashMap = new HashMap<>();
        for(int i = 0; i < len; i++){
            char temp = str.charAt(i);
            if(hashMap.containsKey(temp)){
                hashMap.put(temp, hashMap.get(temp) + 1);
            }else{
                hashMap.put(temp, 1);
            }
        }
        ArrayList<Integer> list = new ArrayList<>();
        for(Character ch : hashMap.keySet()){
            list.add(hashMap.get(ch));
        }
        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        int sum = 0;
        int[] weight = {26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
        for (int i = 0; i < list.size(); i++) {
            sum += list.get(i) * weight[i];
        }
        return sum;
    }
}

发表于 2022-08-15 22:54:27 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        Scanner scan = new Scanner(System.in);
        int k = scan.nextInt();
        for(int i = 0;i < k;i++) {
            String str = scan.next();
            List<Integer> list = new ArrayList<>();
            Map<Character,Integer> map = new LinkedHashMap<>();
            for(int j = 0;j < str.length();j++) {
                if(map.get(str.charAt(j)) != null) {
                    map.put(str.charAt(j),map.get(str.charAt(j))+1);
                } else {
                    map.put(str.charAt(j),1);
                }
            }
            for (Map.Entry<Character,Integer> entry: map.entrySet()) {
                list.add(entry.getValue());
            }
            Collections.sort(list);
            Collections.reverse(list);
            int result = 0;
            int p = 26;
            for(Integer vaule : list ) {
                result += vaule * p;
                p--;
        }
        System.out.println(result);
    }
}
}

发表于 2022-08-07 18:41:10 回复(0)
用stream来读取输入效率会变得很高,推荐使用
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String str;
        for (int i = 0; i < n; ++i){
            str = br.readLine();
            char[] arr = str.toLowerCase().toCharArray();
            int beautiful = 0;
            int[] arrScore = new int[26];
            for (int j = 0; j < arr.length; ++j){
                int index = arr[j] - 'a';
                arrScore[index] ++;
            }

            Arrays.sort(arrScore);
            for (int j = 26; j >= 1; j--){
                beautiful += arrScore[j - 1] * j;
            }
            System.out.println(beautiful);
        }
    }
}

发表于 2022-08-03 15:07:42 回复(0)
import java.util.*;


public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        int n = Integer.valueOf(in.nextLine());

        List<Integer> list = new ArrayList(n);

        for(int i=0;i<n;i++){
            list.add(calc(in.nextLine()));
        }

        for(Integer sum : list){
            System.out.println(sum);
        }
    }

    public static int calc(String s){
        if(s.length() == 0){
            return 0;
        }

        //去重后一共有多少个字符
        Set<Character> set = new HashSet();

        for(int i=0;i<s.length();i++){
            set.add(s.charAt(i));
        }

        //计算每个字符出现的次数
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        Iterator<Character> iterator = set.iterator();
        while (iterator.hasNext()) {
            Character c = iterator.next();
            String s1 = s.replaceAll(String.valueOf(c), "");
            int count = s.length()- s1.length();
            map.put(c, count);
        }

        //排序
        List<Integer> values = new ArrayList<Integer>(map.values());
        values.sort(new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

        int i = 26;
        int sum = 0;
        for (Integer count : values) {
            sum += i*count;
            i--;
        }

        return sum;
    }
}

发表于 2022-07-02 15:01:39 回复(0)
import java.util.*;
public class Main {
  public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int n = sc.nextInt();
      String[] s = new String[n];
      for(int i=0;i<n;i++){
          s[i] = sc.next();
      }
      int[] res = new int[n];
      for(int i=0;i<n;i++){
          String ss = s[i];
          int[] arr = new int[26];
          for(char ch : ss.toCharArray()){
              arr[ch-'a']++;
          }
          Arrays.sort(arr);
          int sum = 0;
          for(int k=26;k>=1;k--){
              sum += k*(arr[k-1]);
          }
          res[i] = sum;
      }
      for(int i=0;i<n;i++){
          System.out.println(res[i]);
      }
  }  
}

发表于 2022-06-18 20:55:38 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int n = scanner.nextInt();
            String[] arr = new String[n];
            for (int i = 0; i < n; i++){
                arr[i] = scanner.next();
            }
            int[] res = new int[n];
            for (int i = 0; i < n; i++){
                Map<Character, Integer> map = new HashMap<>();
                for (int j = 0; j < arr[i].length(); j++){
                    if (map.containsKey(arr[i].charAt(j))){
                        int count = map.get(arr[i].charAt(j));
                        count++;
                        map.put(arr[i].charAt(j), count);
                    }else {
                        map.put(arr[i].charAt(j), 1);
                    }
                }
                List<Integer> list = new ArrayList<>();
                for (char ch:map.keySet()) {
                    list.add(map.get(ch));
                }
                Collections.sort(list);
                Collections.reverse(list);
                int number = 26;
                for (int j = 0; j < list.size(); j++) {
                    res[i] += list.get(j)*number;
                    number--;
                }
            }
            for (int i = 0; i < res.length; i++) {
                System.out.println(res[i]);
            }
        }
    }
}

发表于 2022-06-12 22:03:29 回复(0)
import java.util.Scanner;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.LinkedList;
import java.util.Collections;
public class Main{
    public static void main(String[]args){
        Scanner scan =  new Scanner(System.in);
        while(scan.hasNext()){
            int num=scan.nextInt();
            String []array= new String[num];
            for(int i=0;i<num;i++){
                array[i]=scan.next();
                System.out.println(getPrety(array[i]));
            }
        }
        scan.close();
    }
    public static int getPrety(String string){
        int[]prety =new int[26];
        for(int i=0;i<26;i++){
            prety[i]=26-i;
        }
        Map<Character,Integer>map=new LinkedHashMap<Character,Integer>();
        for(int i=0;i<string.length();i++){
            char ch = string.charAt(i);
            if(map.containsKey(ch)){
                map.put(ch,map.get(ch)+1);
            }else{
                map.put(ch,1);
            }
        }
        List<Integer>list= new LinkedList<Integer>(map.values());
        Collections.sort(list);
        Collections.reverse(list);
        int sum =0;
        for(int i=0;i<list.size();i++){
            sum+=list.get(i)*prety[i];
        }
        return sum;
    }
}

发表于 2022-06-07 22:34:54 回复(0)

问题信息

难度:
67条回答 37504浏览

热门推荐

通过挑战的用户

查看代码