?题目链接:https://leetcode-cn.com/problems/sort-characters-by-frequency/
题意:给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
?方法:利用哈希表存储字符出现的次数,利用vector和pair的性质进行排序
bool cmp(pair<char,int> a,pair<char,int> b)
{
return a.second>b.second;//根据出现的次数降序排序
}
class Solution {
public:
string frequencySort(string s) {
vector<int> mp(127,0);//哈希表,总共127个字符
string ret="";//要返回的字符串
for(auto& ch:s)//遍历更新哈希表
{
mp[ch-0]++;//将ascii码存到哈希表中,更新key值对应的value值
}
vector<pair<char,int>> vct; //向量存储pair对用来进行排序
for(int i=0;i<127;i++)
{
vct.push_back({i,mp[i]});//更新向量
}
sort(vct.begin(),vct.end(),cmp);//由出现次数的大小进行排序
for(auto iter=vct.begin();iter!=vct.end();iter++)
{
if(iter->second==0) break;//如果遍历到字符没出现过就可以结束了
for(int i=0;i<iter->second;i++)
ret+=iter->first;//更新ret
}
return ret;
}
};
|