Related Articles
Rearrange the string to maximize the number of palindromic substrings
• Difficulty Level : Medium
• Last Updated : 01 Apr, 2021

Given a string S consisting of lowercase characters(a-z) only, the task is to print a new string by rearranging the string in such a way that maximizes the number of palindromic substrings. In case of multiple answers, print any one.
Note: even if some substrings coincide, count them as many times as they appear in the obtained string.
Examples:

Input: s = “aabab”
Output: ababa
string “ababa” has 9 palindromic substrings: “a”, “b”, “a”, “b”, “a”, “aba”, “bab”, “aba”, “ababa”.
Input: s = “aa”
Output: aa
The given string has the maximum number of palindromic substrings possible, “a”, “a” and “aa”.

The problem might look to be a complex one but on solving for various cases and having observations will lead to an easy solution.
A simple solution is to sort the string and print it. Sorting takes O(N * log N).
An efficient solution is to count the frequency of each character using a freq[] array and then construct the string using the freq[] array.
Below is the implementation of the above approach.

## C++

 `// C++ program to rearrange the``// string such to maximize the``// number of palindromic substrings``#include ``using` `namespace` `std;` `// Function to return the newString``string newString(string s)``{``    ``// length of string``    ``int` `l = s.length();` `    ``// hashing array``    ``int` `freq = { 0 };` `    ``// iterate and count``    ``for` `(``int` `i = 0; i < l; i++) {``        ``freq[s[i] - ``'a'``] += 1;``    ``}` `    ``// resulting string``    ``string ans = ``""``;` `    ``// form the resulting string``    ``for` `(``int` `i = 0; i < 26; i++) {` `        ``// number of times character appears``        ``for` `(``int` `j = 0; j < freq[i]; j++) {` `            ``// append to resulting string``            ``ans += (``char``)(97 + i);``        ``}``    ``}` `    ``return` `ans;``}` `// Driver Code``int` `main()``{` `    ``string s = ``"aabab"``;` `    ``cout << newString(s);` `    ``return` `0;``}`

## Java

 `// Java program to rearrange the``// string such to maximize the``// number of palindromic substrings`  `public` `class` `GFG {``    ` `    ``// Function to return the newString``    ``static` `String newString(String s)``    ``{``        ``// length of string``        ``int` `l = s.length();` `        ``// hashing array``        ``int` `freq[] = ``new` `int` `[``26``] ;` `        ``// iterate and count``        ``for` `(``int` `i = ``0``; i < l; i++) {``            ``freq[s.charAt(i) - ``'a'``] += ``1``;``        ``}` `        ``// resulting string``        ``String ans = ``""``;` `        ``// form the resulting string``        ``for` `(``int` `i = ``0``; i < ``26``; i++) {` `            ``// number of times character appears``            ``for` `(``int` `j = ``0``; j < freq[i]; j++) {` `                ``// append to resulting string``                ``ans += (``char``)(``97` `+ i);``            ``}``        ``}` `        ``return` `ans;``    ``}`  `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``           ``String s = ``"aabab"``;``            ``System.out.println(newString(s));``    ``}``    ``// This Code is contributed by ANKITRAI1``}`

## Python3

 `# Python3 program to rearrange the``# string such to maximize the``# number of palindromic substrings` `# Function to return the newString``def` `newString(s):` `    ``# length of string``    ``l ``=` `len``(s)` `    ``# hashing array``    ``freq ``=` `[``0``] ``*` `(``26``)` `    ``# iterate and count``    ``for` `i ``in` `range``(``0``, l):``        ``freq[``ord``(s[i]) ``-` `ord``(``'a'``)] ``+``=` `1` `    ``# resulting string``    ``ans ``=` `""` `    ``# form the resulting string``    ``for` `i ``in` `range``(``0``, ``26``):` `        ``# number of times character appears``        ``for` `j ``in` `range``(``0``, freq[i]):` `            ``# append to resulting string``            ``ans ``+``=` `chr``(``97` `+` `i)``    ` `    ``return` `ans` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``s ``=` `"aabab"``    ``print``(newString(s))` `# This code is contributed by Rituraj Jain`

## C#

 `// C# program to rearrange the``// string such to maximize the``// number of palindromic substrings``using` `System;``class` `GFG``{` `// Function to return the newString``static` `String newString(``string` `s)``{``    ``// length of string``    ``int` `l = s.Length;` `    ``// hashing array``    ``int``[] freq = ``new` `int` `;` `    ``// iterate and count``    ``for` `(``int` `i = 0; i < l; i++)``    ``{``        ``freq[s[i] - ``'a'``] += 1;``    ``}` `    ``// resulting string``    ``string` `ans = ``""``;` `    ``// form the resulting string``    ``for` `(``int` `i = 0; i < 26; i++)``    ``{` `        ``// number of times character appears``        ``for` `(``int` `j = 0; j < freq[i]; j++)``        ``{` `            ``// append to resulting string``            ``ans += (``char``)(97 + i);``        ``}``    ``}` `    ``return` `ans;``}`  `// Driver code``public` `static` `void` `Main()``{``    ``string` `s = ``"aabab"``;``    ``Console.Write(newString(s));``}``}` `// This code is contributed``// by ChitraNayal`

## Javascript

 ``
Output:

`aaabb`

Time Complexity: O(N)
Auxiliary Space: O(26)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up