ホームページ >バックエンド開発 >C++ >C++ で (可能であれば) 文字を並べ替えて回文を形成する

C++ で (可能であれば) 文字を並べ替えて回文を形成する

王林
王林転載
2023-09-09 15:57:09958ブラウズ

C++ で (可能であれば) 文字を並べ替えて回文を形成する

任意の長さの文字列 'str' が与えられます。ここでのタスクは、指定された入力文字列に文字を追加または削除せずに、出力が回文文字列になるように文字を再配置することです。回文文字列とは、文字が最初から最後まで同じように聞こえるように配置されているものです。

このためのさまざまな入出力シナリオを見てみましょう -

入力 - String str = "itnin"

出力 - 可能であれば、回文文字列を形成するための文字の再配置は次のとおりです。 nitin

説明 - string 型の変数が与えられており、str であると想定されます。次に、入力文字列の文字を再配置して回文文字列にします (

でない場合)。 可能な場合は「NOT POSSIBLE」が返されます。したがって、入力文字列を指定した場合の出力は「nitin」になります。

Input - String str = "baaaba"

Output - 回文を形成するために文字を再配置した結果は次のとおりです: aabbaa

説明 - str であると仮定して、文字列型の変数が与えられます。次に、入力文字列の文字を再配置して回文文字列にし、それが不可能な場合は「NOT POSSIBLE」を返します。したがって、入力文字列を指定した場合の出力は「aabbaa」になります。

以下のプログラムで使用するメソッドは次のとおりです。

  • 文字列型の変数を str として入力し、文字列のサイズを計算して格納します。名前は長さの変数です。

  • データを関数 Rearrangement(str, length) に渡します。

  • 関数 Rearrangement(arr, length) の内部

    • #「um」という名前の unowned_map 型変数を作成します。この変数には、char と integer の型が格納されます。キーと値のペア。

    • 整数型変数 total を宣言し、0 に設定します。

    • 文字型変数 'c​​h' と文字列型変数 str_1 と str_2 を作成します。

    • i が長さ未満になるまで、i から 0 までループを開始します。ループ内で、値 1 を増分して um[str[i]] を設定します。

    • FOR のループを開始して、マップ 'um' を反復します。ループ内で、it.second % 2 が 0 に等しくないことを確認し、total を 1 増やして ch を it.first に設定します。

    • total が 1 より大きいか、または total = 1 かつ length % 2 = 0 であるかどうかを確認すると、0 が返されます。

    • FOR のループを開始して、マップ 'um' を反復します。ループ内で、str(it.second / 2, it.first) を str に、str_1 を str_1 str に、str_2 を str str_2 に設定します。

    • IF total = 1 を確認し、str_1 ch str_2 を返します。それ以外の場合は、str_1 str_2 が返されます。

  • #結果を印刷します。

#include <bits/stdc++.h>
using namespace std;
string Rearrangement(string str, int length){
   unordered_map<char, int> um;
   int total = 0;
   char ch;
   string str_1 = "";
   string str_2 = "";

   for (int i = 0; i < length; i++){
      um[str[i]]++;
   }
   for(auto it : um){
      if(it.second % 2 != 0){
         total++;
         ch = it.first;
      }
   }
   if(total > 1 || total == 1 && length % 2 == 0){
      return 0;
   }
   for(auto it : um){
      string str(it.second / 2, it.first);
      str_1 = str_1 + str;
      str_2 = str + str_2;
   }
   if(total == 1){
      return str_1 + ch + str_2;
   }
   else{
      return str_1 + str_2;
   }
}
int main(){
   string str = "itnin";
   int length = str.size();
   cout<<"Rearrangement of characters to form palindrome if possible is: "<<Rearrangement(str, length);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Rearrangement of characters to form palindrome if possible is: nitin

以上がC++ で (可能であれば) 文字を並べ替えて回文を形成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。