如果可能,在C++中重新排列字符以形成回文


给定任意长度的字符串“str”。任务是重新排列字符,使其成为回文字符串,无需添加或删除输入字符串中的任何字符。回文字符串是指字符排列方式从头到尾读音相同的字符串。

让我们看看各种输入输出场景:

输入 - 字符串 str = "itnin"

输出 - 如果可能,重新排列字符以形成回文是:nitin

解释 - 给定一个字符串类型变量,例如str。现在我们将重新排列输入字符串的字符,使其成为回文字符串;如果不可能,则返回“不可能”。因此,给定输入字符串的输出是“nitin”。

输入 - 字符串 str = "baaaba"

输出 - 如果可能,重新排列字符以形成回文是:aabbaa

解释 - 给定一个字符串类型变量,例如str。现在我们将重新排列输入字符串的字符,使其成为回文字符串;如果不可能,则返回“不可能”。因此,给定输入字符串的输出是“aabbaa”。

下面程序中使用的方法如下:

  • 输入一个字符串类型的变量,例如str,计算字符串的大小并将其存储在一个名为length的变量中。

  • 将数据传递给函数Rearrangement(str, length)。

  • 在函数Rearrangement(arr, length)内部:

    • 创建一个名为“um”的无序映射变量,它存储字符和整数类型的键值对。

    • 声明一个整数类型的变量为total,并将其设置为0。

    • 创建一个字符类型的变量为‘ch’,和字符串类型的变量为str_1和str_2。

    • 从i=0开始循环,直到i小于length。在循环内,将um[str[i]]递增1。

    • 开始循环遍历映射‘um’。在循环内,检查IF it.second % 2 不等于0,则将total加1,并将ch设置为it.first。

    • 检查IF total大于1,或者total = 1且length % 2 = 0,则返回0。

    • 开始循环遍历映射‘um’。在循环内,设置str(it.second / 2, it.first),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

更新于:2021年11月2日

889 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.