Heim > Backend-Entwicklung > C++ > Hauptteil

Ordnen Sie Zeichen in C++ neu an, um ein Palindrom zu bilden (falls möglich).

王林
Freigeben: 2023-09-09 15:57:09
nach vorne
955 Leute haben es durchsucht

Ordnen Sie Zeichen in C++ neu an, um ein Palindrom zu bilden (falls möglich).

我们被给定一个长度为任意给定长度的字符串'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;
}
Nach dem Login kopieren

输出

如果我们运行上述代码,将会生成以下输出

Rearrangement of characters to form palindrome if possible is: nitin
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonOrdnen Sie Zeichen in C++ neu an, um ein Palindrom zu bilden (falls möglich).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage