C++で頻度で文字を並べ替える
文字列があるとすると、頻度に基づいて文字を並べ替える必要があります。したがって、文字列が「abbbacbcc」のような場合、出力は「bbbbcccaa」になります
これを解決するには、次の手順に従います-
- vというペアの配列を作成し、1つのマップmを作成します
- 文字列内のすべての文字について、
- m[文字]の値を1増やします
- i:=マップの最初の要素
- マップには要素があります
- (i.second、i.first)をvに挿入します
- 次の要素を指すようにiを増やします
- ベクトルvを並べ替える
- ans:=空の文字列
- for i:=0からvのサイズ
- t:=v[i]の最初の要素
- tが0ではない場合
- ans:=ans + v[i]の2番目の部分
- 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
-
C++でのストランドソート
このセクションでは、C++の標準ライブラリを使用して配列またはリンクリストを並べ替える方法を説明します。 C ++には、さまざまな目的に使用できる複数の異なるライブラリがあります。並べ替えもその1つです。 C++関数std::list ::sort()は、リストの要素を昇順で並べ替えます。等しい要素の順序は保持されます。比較のために演算子<を使用します。 例 #include <iostream> #include <list> using namespace std; int main(void) { list<int> l =
-
C++の三重音字
ISO-646文字セットにはC構文のすべての文字が含まれているわけではないため、一部の文字を処理できないキーボードとディスプレイを備えたシステムがいくつかあります。これらの文字は、トリグラフと呼ばれる3文字のシーケンスを使用して作成できます。 Cでは、他の処理が行われる前に、次の3文字のシーケンス(「トリグラフシーケンス」)のいずれかが出現するたびに、1文字に置き換えられます。 trigraph 交換 トリグラフ 交換 トリグラフ 交換 ?? = # ??( [ ?? { ?? / \ ??) ]