C++でのカスタムソート文字列
SとTの2つの文字列があり、これらは小文字で構成されているとします。 Sでは、文字が2回以上出現することはありません。 Sは、以前はカスタム順序で並べ替えられていました。 Sが並べ替えられた順序と一致するように、Tの文字を並べ替える必要があります。より具体的には、Sでxがyの前に発生する場合、返される文字列ではxがyの前に発生します。
したがって、S =“ cba”およびT =“ abcd”の場合、出力は“ cbad”になります。ここで、Sには「a」、「b」、「c」が表示されるため、「a」、「b」、「c」の順序は「c」、「b」、「a」の順になります。 「d」はSに表示されないため、Tの任意の位置に配置できます。「dcba」、「cdba」、「cbda」も有効な出力です。
これを解決するには、次の手順に従います-
-
retを空の文字列として設定
-
マップmを定義し、Tに存在する各文字の頻度をmに格納します
-
0からS–1のサイズまでの範囲のiの場合
-
x:=S [i]
-
0からm[x]– 1
の範囲のjの場合-
ret:=ret + x
-
-
m [x]:=0
-
-
ペアごとにm−
-
その値が>0の場合、
-
0からその値までの範囲のiの場合– 1
-
ret:=ret連結キー
-
-
-
-
retを返す
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: string customSortString(string S, string T) { string ret = ""; unordered_map <char, int> m; for(int i = 0; i < T.size(); i++){ m[T[i]]++; } for(int i = 0; i < S.size(); i++){ char x = S[i]; for(int j = 0; j < m[x]; j++){ ret += x; } m[x] = 0; } unordered_map <char, int> :: iterator it = m.begin(); while(it != m.end()){ if(it->second > 0){ for(int i = 0; i < it->second; i++)ret += it->first; } it++; } return ret; } }; main(){ Solution ob; cout << (ob.customSortString("cba", "abcd")); }
入力
"cba" "abcd"
出力
cbad
-
C ++で文字列をトークン化しますか?
最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() { string str("Hello from the dark side"); string tmp; // A string
-
文字列をカスタム順序で並べ替えるPythonプログラム
1つの英数字の文字列があるとします。次の条件に基づいて並べ替える必要があります ソートされたすべての小文字は大文字の前に配置されます。 ソートされた大文字はすべて数字の前に配置されます。 ソートされたすべての奇数桁は、ソートされた偶数桁の前に配置されます。 したがって、入力がs =HeLlo1234のような場合、出力はeloHL1324になります。 これを解決するには、次の手順に従います- 関数f()を定義します。これにはcがかかります コード:=0 cが大文字の場合、 コード:=10 ^ 3 それ以外の場合、cが数字の場合、 コード:=10 ^ 6