Make palindromic string non-palindromic by rearranging its letters - GeeksforGeeks

03 Aug, 2021
Given string str containing lowercase alphabets (a – z). The task is to print the string after rearranging some characters such that the string becomes non-palindromic. If it’s impossible to make the string non-palindrome then print -1.Examples:  
Input: str = “abba” Output: aabbInput: str = “zzz” Output: -1  
 
Approach: If all the characters in the string are the same then no matter how you rearrange the characters, the string will remain the same and will be palindromic. Now, if a non-palindromic arrangement exists, the best way to rearrange the characters is to sort the string which will form a continuous segment of the same characters and will never be palindromic. In order to reduce the time required to sort the string, we can store the frequencies of all 26 characters and print them in a sorted manner.Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// CPP Program to rearrange letters of string// to find a non-palindromic string if it exists#include <bits/stdc++.h>using namespace std; // Function to print the non-palindromic string// if it exists, otherwise prints -1void findNonPalinString(string s){    int freq[26] = { 0 }, flag = 0;     for (int i = 0; i < s.size(); i++) {         // If all characters are not        // same, set flag to 1        if (s[i] != s[0])            flag = 1;         // Update frequency of the current character        freq[s[i] - 'a']++;    }     // If all characters are same    if (!flag)        cout << "-1";    else {         // Print characters in sorted manner        for (int i = 0; i < 26; i++)            for (int j = 0; j < freq[i]; j++)                cout << char('a' + i);    }} // Driver Codeint main(){    string s = "abba";     findNonPalinString(s);     return 0;}
// Java Program to rearrange letters of string// to find a non-palindromic string if it existsclass GfG{ // Function to print the non-palindromic string// if it exists, otherwise prints -1static void findNonPalinString(char s[]){    int freq[] = new int[26];    int flag = 0;     for (int i = 0; i < s.length; i++)    {         // If all characters are not        // same, set flag to 1        if (s[i] != s[0])            flag = 1;         // Update frequency of        // the current character        freq[s[i] - 'a']++;    }     // If all characters are same    if (flag == 0)        System.out.println("-1");    else    {         // Print characters in sorted manner        for (int i = 0; i < 26; i++)            for (int j = 0; j < freq[i]; j++)                System.out.print((char)('a' + i));    }} // Driver Codepublic static void main(String[] args){    String s = "abba";         findNonPalinString(s.toCharArray());}} // This code is contributed by// Prerna Saini.
# Python3 Program to rearrange letters of string# to find a non-palindromic string if it exists # Function to print the non-palindromic string# if it exists, otherwise prints -1def findNonPalinString(s):     freq = [0] * (26)    flag = 0     for i in range(0, len(s)):         # If all characters are not same,        # set flag to 1        if s[i] != s[0]:            flag = 1         # Update frequency of the current        # character        freq[ord(s[i]) - ord('a')] += 1     # If all characters are same    if not flag:        print("-1")         else:                 # Print characters in sorted manner        for i in range(0, 26):            for j in range(0, freq[i]):                print(chr(ord('a') + i),                               end = "") # Driver Codeif __name__ == "__main__":     s = "abba"    findNonPalinString(s) # This code is contributed by# Rituraj Jain
// C# Program to rearrange letters// of string to find a non-palindromic// string if it existsusing System; class GfG{     // Function to print the    // non-palindromic string    // if it exists, otherwise    // prints -1    static void findNonPalinString(char []s)    {        int []freq = new int[26];        int flag = 0;             for (int i = 0; i < s.Length; i++)        {                 // If all characters are not            // same, set flag to 1            if (s[i] != s[0])                flag = 1;                 // Update frequency of            // the current character            freq[s[i] - 'a']++;        }             // If all characters are same        if (flag == 0)            Console.WriteLine("-1");        else        {                 // Print characters in sorted manner            for (int i = 0; i < 26; i++)                for (int j = 0; j < freq[i]; j++)                        Console.Write((char)('a' + i));        }    }         // Driver Code    public static void Main()    {        string s = "abba";                 findNonPalinString(s.ToCharArray());    }} // This code is contributed by Ryuga
<script> // JavaScript Program to rearrange letters of string// to find a non-palindromic string if it exists // Function to print the non-palindromic string// if it exists, otherwise prints -1function findNonPalinString(s){    var freq = Array.from({length: 26}, (_, i) => 0);    var flag = 0;     for (var i = 0; i < s.length; i++)    {         // If all characters are not        // same, set flag to 1        if (s[i] != s[0])            flag = 1;         // Update frequency of        // the current character        freq[s[i].charCodeAt(0) -        'a'.charCodeAt(0)]++;    }     // If all characters are same    if (flag == 0)        document.write("-1");    else    {         // Print characters in sorted manner        for (var i = 0; i < 26; i++)            for (var j = 0; j < freq[i]; j++)                document.write(String.fromCharCode                ('a'.charCodeAt(0) + i));    }} // Driver Codevar s = "abba"; findNonPalinString(s.split('')); // This code contributed by shikhasingrajput </script>
aabb
 
Time Complexity: O(N)Auxiliary Space: O(1)
prerna saini
rituraj_jain
ankthon
shikhasingrajput
pankajsharmagfg
frequency-counting
palindrome
Sorting Quiz
Algorithms
Sorting
Strings
Strings
Sorting
palindrome
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
Understanding Time Complexity with Simple Examples
Introduction to Algorithms
How to write a Pseudo Code?