在 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

更新於:28-Apr-2020

2K+ 瀏覽量

開啟您的 職業生涯

完成課程後獲得認證

開始使用
廣告
© . All rights reserved.