C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C ++で文字列をトークン化しますか?

    最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() {    string str("Hello from the dark side");    string tmp; // A string

  2. 文字列をカスタム順序で並べ替えるPythonプログラム

    1つの英数字の文字列があるとします。次の条件に基づいて並べ替える必要があります ソートされたすべての小文字は大文字の前に配置されます。 ソートされた大文字はすべて数字の前に配置されます。 ソートされたすべての奇数桁は、ソートされた偶数桁の前に配置されます。 したがって、入力がs =HeLlo1234のような場合、出力はeloHL1324になります。 これを解決するには、次の手順に従います- 関数f()を定義します。これにはcがかかります コード:=0 cが大文字の場合、 コード:=10 ^ 3 それ以外の場合、cが数字の場合、 コード:=10 ^ 6