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

我们得到了一个任意给定长度的字符串“str”。任务是以这样一种方式重新排列字符,即输出将是回文字符串,而无需从给定的输入字符串中添加或删除字符。回文字符串是这样一种字符串,其中字符的排列方式使它们从头到尾发音相同。

让我们看看这个的各种输入输出场景 -

输入 - 字符串 str = "itnin"

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

说明 - 我们给定了一个字符串类型变量,比如说,str。现在我们将重新排列输入字符串的字符,使其成为回文字符串,如果不可能,则返回“NOT POSSIBLE”。所以给定输入字符串的输出是'nitin'。

输入 - 字符串 str = "baaaba"

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

说明- 我们给定了一个字符串类型变量,比如说,str。现在我们将重新排列输入字符串的字符,使其成为回文字符串,如果不可能,则返回“NOT POSSIBLE”。所以给定输入字符串的输出是'aabbaa'。

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

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

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

  • 函数内部 Rearrangement(arr, length)

    • 创建一个变量作为 unordered_map 类型的“um”,用于存储字符和整数类型对。

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

    • 将字符类型变量创建为 'ch',将字符串类型变量创建为 str_1 和 str_2。

    • 从 i 到 0 开始循环 FOR,直到 i 小于长度。在循环内,将 um[str[i]] 设置为增量值 1。

    • 开始循环 FOR 以迭代映射“嗯”。在循环内,检查 IF it.second% 2 不等于 0 然后将总数增加 1 并用 it.first 设置 ch。

    • 检查 IF total 大于 1 OR total = 1 AND length % 2 = 0 然后返回 0。

    • 开始循环 FOR 以迭代映射“嗯”。在循环内,将 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(str, length);

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出

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

以上是 如果可能,在 C++ 中重新排列字符以形成回文 的全部内容, 来源链接: utcz.com/z/359667.html

回到顶部