Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงอักขระตามความถี่ใน C++


สมมติว่าเรามีสตริง เราต้องจัดเรียงอักขระตามความถี่ ดังนั้นหากสตริงเป็นเหมือน “abbbacbcc” ผลลัพธ์จะเป็น “bbbbcccaa”

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • สร้างอาร์เรย์ของคู่ที่เรียกว่า v สร้างหนึ่งแผนที่ m
  • สำหรับอักขระทั้งหมดในสตริง
    • เพิ่มค่าของ m[character] ขึ้น 1
  • i :=องค์ประกอบแรกของแผนที่
  • ในขณะที่แผนที่มีองค์ประกอบ
    • แทรก (i.second, i.first) ลงใน v
    • และเพิ่ม i เพื่อชี้ไปที่องค์ประกอบถัดไป
  • เรียงลำดับเวกเตอร์ v
  • ans :=สตริงว่าง
  • สำหรับ i :=0 ถึงขนาดของ v
    • t :=องค์ประกอบแรกของ v[i]
    • ในขณะที่ t ไม่ใช่ 0
      • ans :=ans + ส่วนที่สองของ v[i]
      • ลด t ขึ้น 1
  • คืนสินค้า

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −

#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