在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

回到顶部