在C++中重新排列字符串以最大化回文子串的数量
给定任意长度的字符串“str”。任务是重新排列字符,使其包含尽可能多的回文子串,无需添加或删除任何字符。回文串是指字符排列后从头到尾读音相同的字符串。
让我们看看各种输入输出场景:
输入 - 字符串 str = "itnin"
输出 - 重新排列字符串以最大化回文子串数量的结果是:iinnt。
解释 - 给定一个字符串变量str。我们将重新排列输入字符串的字符,使其成为最大回文串,如果不可能,则返回“不可能”。因此,给定输入字符串的输出是“iinnt”。
输入 - 字符串 str = "abaaaabb"
输出 - 重新排列字符串以最大化回文子串数量的结果是:aaaaabbb。
解释 - 给定一个字符串变量str。我们将重新排列输入字符串的字符,使其成为最大回文串,如果不可能,则返回“不可能”。因此,给定输入字符串的输出是“aaaaabbb”。
下面程序中使用的方法如下:
输入一个字符串类型的变量,例如str,计算字符串的大小并将其存储在一个名为length的变量中。
将数据传递给函数Rearr_string(str, length)。
在函数Rearr_string(str, length)内部:
声明一个大小为26的整型数组,例如arr[26],并将其初始化为0。
声明一个名为temp的字符串类型临时变量。
启动FOR循环,从i=0到i小于length。在循环内,设置arr[str[i] - 'a']++。
启动FOR循环,从i=0到i小于26。在循环内,启动另一个FOR循环,从j=0到j小于arr[i]。在循环内,设置temp = temp + (char)(97 + i)。
返回temp。
打印结果。
示例
#include <bits/stdc++.h> using namespace std; string Rearr_string(string str, int length){ int arr[26] = { 0 }; string temp = ""; for(int i = 0; i < length; i++){ arr[str[i] - 'a']++; } for(int i = 0; i < 26; i++){ for(int j = 0; j < arr[i]; j++){ temp = temp + (char)(97 + i); } } return temp; } int main(){ string str = "itinn"; int length = str.length(); cout<<"Rearrangement of the string to maximize the number of palindromic substrings is: "<<Rearr_string(str, length); return 0; }
输出
如果运行以上代码,将生成以下输出:
Rearrangement of the string to maximize the number of palindromic substrings is: iinnt
广告