1 solutions

  • 0
    @ 2024-6-27 21:21:56

    题解:哈希表计数+自定义排序

    我们可以使用一个哈希表来记录每一个字符串的出现次数,并且对字符串做一个去重。

    然后我们将去重后的字符串存入一个新的字符串数组中,并按照题目的排序规则对这个字符串数组进行排序即可。

    C++(17)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    int n;
    string s[N];
    unordered_map<string,int>cnts;  //统计每个字符串出现的次数
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)cin>>s[i];
        for(int i=1;i<=n;i++){
            cnts[s[i]]++;
        }
        vector<string>p;  //排序前的字符串
        for(auto &[u,v]:cnts){
            p.push_back(u);
        }
        sort(p.begin(),p.end(),[&](auto &a,auto &b)
        {
            if(cnts[a]!=cnts[b])return cnts[a]>cnts[b];  //按照出现的次数降序排序
            return a<b;  //相同出现次数按照字典序升序排序
        });
        for(auto &str:p)cout<<str<<" ";
        return 0;
    }
    

    Java

    import java.util.*;
    import java.util.stream.Collectors;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            Map<String, Integer> cnts = new HashMap<>();  // 用于存储字符串及其出现次数
            for(int i = 0; i < n; i++){
                String s = scanner.next();
                cnts.put(s, cnts.getOrDefault(s, 0) + 1);  // 计算每个字符串出现的次数
            }
            // 将字符串按照出现次数降序排序,出现次数相同的按照字典序升序排序
            List<String> p = cnts.keySet().stream()
                    .sorted((a, b) -> cnts.get(a) != cnts.get(b) ? cnts.get(b) - cnts.get(a) : a.compareTo(b))
                    .collect(Collectors.toList());
            for(String str : p) {
                System.out.print(str + " ");
            }
        }
    }
    

    Python

    n = int(input())
    cnts = {}  # 用于存储字符串及其出现次数
    s=input().split()
    for x in s:
        cnts[x] = cnts.get(x, 0) + 1  # 计算每个字符串出现的次数
    
    # 将字符串按照出现次数降序排序,出现次数相同的按照字典序升序排序
    p = sorted(cnts.keys(), key=lambda x: (-cnts[x], x))
    for str in p:
        print(str, end=" ")
    
    • 1

    Information

    ID
    185
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    4
    Tags
    # Submissions
    258
    Accepted
    5
    Uploaded By