我們被給定一個長度為任意給定長度的字串'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中文網其他相關文章!