zoukankan      html  css  js  c++  java
  • 61根据字符出现频率排序(451)

    作者: Turbo时间限制: 1S章节: 哈希表

    晚于: 2020-08-19 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-26 12:00:00

    问题描述 :

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列,如果频率相同,则按照字符的ASCII码升序排列。

    示例 1:

    输入:

    "tree"

    输出:

    "eert"

    解释:

    'e'出现两次,'r'和't'都只出现一次。

    因此'e'必须出现在'r'和't'之前,而且'r'比't'的ASCII码小。

    示例 2:

    输入:

    "cccaaa"

    输出:

    "aaaccc"

    解释:

    'c'和'a'都出现三次。因此按照字符升序排列,'a'在'c'前。

    示例 3:

    输入:

    "Aabb"

    输出:

    "bbAa"

    解释:

    'A'和'a'被认为是两种不同的字符,并且'A'的ASCII码比'a'小

    输入说明 :

    输入一个字符串

    输出说明 :

    输出一个字符串,字符串中字符的顺序请参考以上说明。

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <string>
    #include <vector>
    #include <unordered_map>
    #include <algorithm>
    using namespace std;
    class Solution {
    public:
        static bool cmp(pair<char,int> a,pair<char,int> b)//必须加static 
        {
            if(a.second==b.second)//
                return a.first<b.first;//个数相等,按ascii码从小到大 排 
            return a.second>b.second;//不相等时按个数从大到小排 
        }
        string frequencySort(string s) 
        {
            unordered_map<char,int> M;
            for(int i=0;i<s.size();i++)
                M[s[i]]++;
            vector<pair<char,int>> vec;
            for(auto &m:M)
                vec.push_back(m);
            sort(vec.begin(),vec.end(),cmp);
            string res;
            for(auto &t:vec)
                res+=string(t.second,t.first);//直接是几倍的字符 
            return res;
        }
    };
    int main()
    {
        string s,res;
        cin>>s;
        res=Solution().frequencySort(s);
        cout<<res;
    }
  • 相关阅读:
    mini linux制作
    samba
    文件链接
    bz1234513
    shell中if判断语句
    文件系统层次结构
    ssh免密码登陆
    shell基础
    参考__Web前端大全
    参考__综合类网站大全
  • 原文地址:https://www.cnblogs.com/zmmm/p/13639870.html
Copyright © 2011-2022 走看看