首頁 > 後端開發 > C++ > 將字元重新排列以形成回文(如果可能)在C++中

將字元重新排列以形成回文(如果可能)在C++中

王林
發布: 2023-09-09 15:57:09
轉載
973 人瀏覽過

將字元重新排列以形成回文(如果可能)在C++中

我們被給定一個長度為任意給定長度的字串'str'。任務是重新排列字符,使輸出成為一個回文字串,而不添加或刪除給定輸入字串中的字符。回文字串是指字元以一種方式排列,使得它們從開始到結束發音相同。

讓我們看看這個的各種輸入輸出場景-

輸入 - 字串str = "itnin"

#輸出 - 如果可能,字元的重新排列形成回文字串是:nitin

解釋 - 我們被給定一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使其成為一個回文字串,如果不是的話

如果可能,它將返回'NOT POSSIBLE'。因此,給定輸入字串的輸出為'nitin'。

輸入 - 字串str = "baaaba"

#輸出 - 可能的字元重新排列形成回文的結果是:aabbaa

解釋 - 我們給定一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使其成為回文字串,如果不可能,則返回'NOT POSSIBLE'。因此,給定輸入字串的輸出為'aabbaa'。

下面程式中使用的方法如下

  • 輸入字串類型的變量,假設為str,併計算字串的大小,將其儲存在一個名為length的變數中。

  • 將資料傳遞給函數Rearrangement(str, length)。

  • 在函數Rearrangement(arr, length)內部

    • 建立一個名為'um'的unordered_map類型變量,它儲存char和integer類型的鍵值對。

    • 宣告一個整數型別變數total,並將其設為0。

    • 建立一個字元類型變數'ch'和字串類型變數str_1和str_2。

    • 從i到0的迴圈開始,直到i小於length。在循環內,透過遞增值1設定um[str[i]]。

    • 開始循環FOR來迭代map 'um'。在循環內,檢查IF it.second % 2不等於0,則將total增加1,並將ch設為it.first。

    • 檢查IF total大於1或total = 1且length % 2 = 0,則回傳0。

    • 開始循環FOR來迭代map '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中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板