我是靠谱客的博主 慈祥金针菇,最近开发中收集的这篇文章主要介绍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中的元组。

最后

以上就是慈祥金针菇为你收集整理的451. Sort Characters By Frequency(python+cpp)的全部内容,希望文章能够帮你解决451. Sort Characters By Frequency(python+cpp)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部