Cool说丨力扣451

简介: [451. 根据字符出现频率排序]


451. 根据字符出现频率排序

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

示例 1:

输入:

"tree"

输出:

"eert"

解释:

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

因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

示例 2:

输入:

"cccaaa"

输出:

"cccaaa"

解释:

'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。

注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例 3:

输入:

"Aabb"

输出:

"bbAa"

解释:

此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。

注意'A'和'a'被认为是两种不同的字符。

1、常规做法 借助unordered_map 与 vector

执行用时:36 ms, 在所有 C++ 提交中击败了42.09%的用户

内存消耗:10.9 MB, 在所有 C++ 提交中击败了50.00%的用户

stringfrequencySort(strings) {

   unordered_map<char, int>unmp;

   for (auto&a : s)

       unmp[a]++;

   vector<vector<char>>result;

   for (autoit=unmp.begin(); it!=unmp.end(); ++it) {

       vector<char>temp;

       for (inti=0; i<it->second; ++i) {

           temp.push_back(it->first);

       }

       result.push_back(std::move(temp));

   }

   sort(result.begin(), result.end(), [&](constautoa, constautob) { returna.size() >b.size(); });

   s="";

   for (auto&a : result) {

       for (auto&b:a)

               s+=b;

   }

   returns;

}

2、自己优化了一点内存

执行用时:36 ms, 在所有 C++ 提交中击败了42.09%的用户

内存消耗:8.9 MB, 在所有 C++ 提交中击败了100.00%的用户

stringfrequencySort(strings) {

   unordered_map<char, int>unmp;

   for (constauto&a : s)

       unmp[a]++;

   vector<vector<char>>result;

   for (autoit=unmp.begin(); it!=unmp.end(); ++it) {

       vector<char>temp;

       for (inti=0; i<it->second; ++i) {

           temp.push_back(it->first);

       }

       result.push_back(std::move(temp));

   }

   sort(result.begin(), result.end(), [](constvector<char>&a, constvector<char>&b) { returna.size() >b.size(); });//这里改写,不再使用auto了

   s="";

   for (constauto&a : result) {

       for (constauto&b:a)

               s+=b;

   }

   returns;

}

3、一种别的做法,借助unordered_map 和 mutilmap

目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
130 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
105 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
96 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
105 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
75 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
106 0
|
C#
Cool说丨力扣475
475. 供暖器
114 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
100 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
71 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
90 0