在C ++中按频率对字符排序
假设我们有一个字符串,我们必须根据频率对字符进行排序。因此,如果字符串类似于“ abbbacbcc”,则输出将为“ bbbbcccaa”
为了解决这个问题,我们将遵循以下步骤-
创建一个称为v的对数组,创建一个map m
对于字符串中的所有字符,
m [字符]的值增加1
i:=映射的第一个元素
而映射有元素
将(i.second,i.first)插入v
并增加我以指向下一个元素
排序向量v
ans:=一个空字符串
对于i:= 0等于v的大小
ans:= ans + v [i]的第二部分
将t减1
t:= v [i]的第一个元素
当t不为0时
返回ans
示例
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>using namespace std;
class Solution {
public:
static bool cmp(pair <int, char> a, pair <int, char> b){
return a.first < b.first;
}
string frequencySort(string s) {
vector < pair <int, char> > v;
map <char, int> m;
for(int i = 0; i < s.size(); i++){
m[s[i]]++;
}
map <char, int> :: iterator i = m.begin();
while(i != m.end()){
v.push_back({i->second, i->first});
i++;
}
sort(v.rbegin(), v.rend(), cmp);
string ans = "";
for(int i = 0; i < v.size(); i++){
int t = v[i].first;
while(t--)ans += v[i].second;
}
return ans;
}
};
main(){
Solution ob;
cout << ob.frequencySort("abbbacbcc");
}
输入值
"abbbacbcc"
输出结果
bbbbcccaa
以上是 在C ++中按频率对字符排序 的全部内容, 来源链接: utcz.com/z/358840.html