在 C++ 中按頻率對字元排序
假設我們有一個字串,我們需要根據頻率對字元進行排序。因此,如果字串類似於“abbbacbcc”,則輸出將為“bbbbcccaa”
為了解決此問題,我們將遵循以下步驟 -
- 建立一個名為 v 的對陣列,建立一個地圖 m
- 對於字串中的所有字元,
- 將 m[character] 的值增加 1
- i := 地圖的第一個元素
- while 地圖有元素
- 將 (i.second, i.first) 插入到 v 中
- 並將 i 增加以指向下一個元素
- 對向量 v 進行排序
- ans := 一個空字串
- 對於 i := 0 到 v 的大小
- t := v[i] 的第一個元素
- while t 不為 0
- ans := ans + v[i] 的第二部分
- 將 t 減小 1
- 返回 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP