 Open in App
Not now

# Check if rearranging Array elements can form a Palindrome or not

• Difficulty Level : Medium
• Last Updated : 25 Aug, 2021

Given a positive integer array arr of size N, the task is to check if number formed, from any arrangement of array elements, form a palindrome or not.

Examples:

Input: arr = [1, 2, 3, 1, 2]
Output: Yes
Explanation: The elements of a given array can be rearranged as 1, 2, 3, 2, 1.
Since 12321 is a palindrome, so output will be “Yes”

Input: arr = [1, 2, 3, 4, 1]
Output: No
Explanation: The elements of a given array cannot be rearranged to form a palindrome within all the possible permutations. So the output will be “No”

Approach: Given problem can be solved using map to store the frequency of array elements

• Store the frequency of all array elements
• Check if frequency of each element is even
• For element whose frequency is odd, if there is only one such element, then print Yes. Else print No.

Below is the implementation of the above approach:

## C++14

 `// C++ implementation of the above approach` `#include ``using` `namespace` `std;` `#define MAX 256` `// Function to check whether elements of``// an array can form a palindrome``bool` `can_form_palindrome(``int` `arr[], ``int` `n)``{``    ``// create an empty string``    ``// to append elements of an array``    ``string str = ``""``;` `    ``// append each element to the string str to form``    ``// a string so that we can solve it in easy way``    ``for` `(``int` `i = 0; i < n; i++) {``        ``str += arr[i];``    ``}` `    ``// Create a freq array and initialize all``    ``// values as 0``    ``int` `freq[MAX] = { 0 };` `    ``// For each character in formed string,``    ``// increment freq in the corresponding``    ``// freq array``    ``for` `(``int` `i = 0; str[i]; i++) {``        ``freq[str[i]]++;``    ``}``    ``int` `count = 0;` `    ``// Count odd occurring characters``    ``for` `(``int` `i = 0; i < MAX; i++) {``        ``if` `(freq[i] & 1) {``            ``count++;``        ``}``        ``if` `(count > 1) {``            ``return` `false``;``        ``}``    ``}` `    ``// Return true if odd count is 0 or 1,``    ``return` `true``;``}``// Drive code``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 1, 2 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(``int``);``    ``can_form_palindrome(arr, n)``        ``? cout << ``"YES"``        ``: cout << ``"NO"``;``    ``return` `0;``}`

## Java

 `// Java implementation of the above approach``import` `java.io.*;``import` `java.util.Arrays;` `class` `GFG{` `  ``static` `int` `MAX = ``256``;` `  ``// Function to check whether elements of``  ``// an array can form a palindrome``  ``static` `boolean` `can_form_palindrome(``int` `[]arr, ``int` `n)``  ``{` `    ``// create an empty string``    ``// to append elements of an array``    ``String str = ``""``;` `    ``// append each element to the string str to form``    ``// a string so that we can solve it in easy way``    ``for` `(``int` `i = ``0``; i < n; i++) {``      ``str += arr[i];``    ``}` `    ``// Create a freq array and initialize all``    ``// values as 0``    ``int` `freq[] = ``new` `int``[MAX];``    ``Arrays.fill(freq,``0``);` `    ``// For each character in formed string,``    ``// increment freq in the corresponding``    ``// freq array``    ``for` `(``int` `i = ``0``; i ``1``) {``        ``return` `false``;``      ``}``    ``}` `    ``// Return true if odd count is 0 or 1,``    ``return` `true``;``  ``}` `  ``// Drive code``  ``public` `static` `void` `main (String[] args)``  ``{``    ``int` `[]arr = { ``1``, ``2``, ``3``, ``1``, ``2` `};``    ``int` `n = arr.length;``    ``if``(can_form_palindrome(arr, n))``      ``System.out.println(``"YES"``);``    ``else``      ``System.out.println(``"NO"``);``  ``}``}` `// This code is contributed by shivanisinghss2110`

## Python3

 `# python implementation of the above approach` `# Function to check whether elements of``# an array can form a palindrome``def` `can_form_palindrome(arr, n):``    ``MAX` `=` `256``    ``# create an empty string``    ``# to append elements of an array``    ``s ``=` `""` `    ``# append each element to the string str to form``    ``# a string so that we can solve it in easy way``    ``for` `i ``in` `range``(n) :``        ``s ``=` `s ``+` `str``(arr[i])` `    ``# Create a freq array and initialize all``    ``# values as 0``    ``freq ``=` `[``0``]``*``MAX` `    ``# For each character in formed string,``    ``# increment freq in the corresponding``    ``# freq array``    ``for` `i ``in` `range``(N) :``        ``freq[arr[i]]``=``freq[arr[i]]``+``1``    ` `    ``count ``=` `0` `    ``# Count odd occurring characters``    ``for` `i ``in` `range``(``MAX``) :``        ``if` `(freq[i] & ``1``) :``            ``count``=``count``+``1``        ``if` `(count > ``1``) :``            ``return` `False``        ` `    ``# Return true if odd count is 0 or 1,``    ``return` `True``  ` `# Driver Code``if` `__name__ ``=``=`  `"__main__"``:``    ``arr ``=` `[ ``1``, ``2``, ``3``, ``1``, ``2` `]``    ``N ``=` `len``(arr)``    ` `    ``# Function Call``    ``if``(can_form_palindrome(arr, N)):``        ``print``(``"YES"``)``    ``else``:``        ``print``(``"NO"``)``                   ` ` ``# This code is contributed by anudeep23042002`

## C#

 `// C# implementation of the above approach``using` `System;``using` `System.Collections.Generic;` `class` `GFG{` `static` `int` `MAX = 256;` `// Function to check whether elements of``// an array can form a palindrome``static` `bool` `can_form_palindrome(``int` `[]arr, ``int` `n)``{``    ``// create an empty string``    ``// to append elements of an array``    ``string` `str = ``""``;` `    ``// append each element to the string str to form``    ``// a string so that we can solve it in easy way``    ``for` `(``int` `i = 0; i < n; i++) {``        ``str += arr[i];``    ``}` `    ``// Create a freq array and initialize all``    ``// values as 0``    ``int` `[]freq = ``new` `int``[MAX];``    ``Array.Clear(freq,0,MAX);` `    ``// For each character in formed string,``    ``// increment freq in the corresponding``    ``// freq array``    ``for` `(``int` `i = 0; i 1) {``            ``return` `false``;``        ``}``    ``}` `    ``// Return true if odd count is 0 or 1,``    ``return` `true``;``}``  ` `// Drive code``public` `static` `void` `Main()``{``    ``int` `[]arr = { 1, 2, 3, 1, 2 };``    ``int` `n = arr.Length;``    ``if``(can_form_palindrome(arr, n))``       ``Console.Write(``"YES"``);``    ``else``        ``Console.Write(``"NO"``);``}``}` `// This code is contributed by SURENDRA_GANGWAR.`

## Javascript

 ``

Output

`YES`

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

My Personal Notes arrow_drop_up