451. Sort Characters By Frequency(python+cpp)

题目:

Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:

Input: "tree"
Output: "eert"
Explanation: 'e' appears twice while 'r' and 't' both appear once. So 'e' must appear 
before both 'r' and 't'. Therefore "eetr" is also a valid answer. 

Example 2:

Input: "cccaaa"
Output: "cccaaa"
Explanation: Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer. Note
that "cacaca" is incorrect, as the same characters must be together. 

Example 3:

Input: "Aabb"
Output: "bbAa"
Explanation: "bbaA" is also a valid answer, but "Aabb" is incorrect. Note that 'A' and 'a' 
are treated as two different characters.

解释:
先统计,再根据出现的频率排序。
在python中需要用item()函数把字典键值对转成元组,在c++中需要转成pair 数组,而且要自己实现一下排序函数。
python代码:

from collections import Counter
class Solution(object):
    def frequencySort(self, s):
        """
        :type s: str
        :rtype: str
        """
        _dict=Counter(s)
        sort_dict=sorted(_dict.items(),key=lambda item:item[1],reverse=True)
        result=''
        for item in sort_dict:
            result+=item[0]*item[1]
        return result

c++代码:

#include <map>
using namespace std;
class Solution {
public:
    string frequencySort(string s) {
        map<char,int> _map;
        for(auto letter:s)
            _map[letter]+=1;
        //把map转换成数组
        vector<pair<char, int>> map_list(_map.begin(),_map.end());
        sort(map_list.begin(),map_list.end(),cmp);
        string result="";
        for (auto item :map_list)
        {
            string tmp(item.second, item.first);
            result+=tmp;
        }
        return result;
    }
    static bool cmp(const pair<char, int>& item1,const pair<char, int>& item2)
    {
        return item1.second>item2.second;
    }
};

总结:
python中,d.items()实际上是将d转换为可迭代对象,迭代对象的元素为(‘lilee’,25)、(‘wangyan’,21)、(‘liqun’,32)、(‘lidaming’,19),items()方法将字典的元素转化为了元组,而这里key参数对应的lambda表达式的意思则是选取元组中的第二个元素作为比较参数(如果写作key=lambda item:item[0]的话则是选取第一个元素作为比较对象,也就是key值作为比较对象。lambda x:y中x表示输入参数,y表示lambda函数的返回值),所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个list,而原字典中的键值对对被转换为了list中的元组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值