# Modify string by sorting characters after removal of characters whose frequency is not equal to power of 2

Given a string **S** consisting of **N** lowercase alphabets, the task is to remove the characters from the string whose frequency is not a power of 2 and then sort the string in ascending order.

**Examples:**

Input:S = “aaacbb”Output:bbcExplanation:The frequencies of ‘a’, ‘b’, and ‘c’ in the given string are 3, 2, 1. Only the character ‘a’ has frequency (= 3) which is not a power of 2. Therefore, removing ‘a’ from the string S modifies it to “cbb”. Therefore, the modified string after sorting is “bbc”.

Input:S = “geeksforgeeks”Output:eeeefggkkorss

**Approach:** The given problem can be solved by using Hashing. Follow the steps below to solve the given problem:

- Initialize an auxiliary array of size
**26**, say**freq[]**, to store the frequency of each character in the string**S**such that index**0**represents character**‘a’**,**1**represents the character**‘b’**, and so on. - Traverse the given string
**S**and increment the frequency of each character**S[i]**by**1**in the array**freq[]**. - Traverse the array
**freq[]**and if the value of**freq[i]**is a power of 2, then print the character**(‘a’ + i), freq[i]**number of times.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to remove all the characters` `// from a string that whose frequencies` `// are not equal to a perfect power of 2` `void` `countFrequency(string S, ` `int` `N)` `{` ` ` `// Stores the frequency of` ` ` `// each character in S` ` ` `int` `freq[26] = { 0 };` ` ` `// Iterate over characters of string` ` ` `for` `(` `int` `i = 0; i < N; i++) {` ` ` `// Update frequency of current` ` ` `// character in the array freq[]` ` ` `freq[S[i] - ` `'a'` `]++;` ` ` `}` ` ` `// Traverse the array freq[]` ` ` `for` `(` `int` `i = 0; i < 26; i++) {` ` ` `// Check if the i-th letter` ` ` `// is absent from string S` ` ` `if` `(freq[i] == 0)` ` ` `continue` `;` ` ` `// Calculate log of frequency` ` ` `// of the current character` ` ` `// in the string S` ` ` `int` `lg = log2(freq[i]);` ` ` `// Calculate power of 2 of lg` ` ` `int` `a = ` `pow` `(2, lg);` ` ` `// Check if freq[i]` ` ` `// is a power of 2` ` ` `if` `(a == freq[i]) {` ` ` `// Print letter i + 'a'` ` ` `// freq[i] times` ` ` `while` `(freq[i]--)` ` ` `cout << (` `char` `)(i + ` `'a'` `);` ` ` `}` ` ` `}` `}` `// Driver Code` `int` `main()` `{` ` ` `string S = ` `"aaacbb"` `;` ` ` `int` `N = S.size();` ` ` `countFrequency(S, N);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `class` `GFG{` ` ` `// Function to remove all the characters` `// from a string that whose frequencies` `// are not equal to a perfect power of 2` `static` `void` `countFrequency(String S, ` `int` `N)` `{` ` ` ` ` `// Stores the frequency of` ` ` `// each character in S` ` ` `int` `[]freq = ` `new` `int` `[` `26` `];` ` ` `//Array.Clear(freq, 0, freq.Length);` ` ` `// Iterate over characters of string` ` ` `for` `(` `int` `i = ` `0` `; i < N; i++)` ` ` `{` ` ` ` ` `// Update frequency of current` ` ` `// character in the array freq[]` ` ` `freq[(` `int` `)S.charAt(i) - ` `'a'` `] += ` `1` `;` ` ` `}` ` ` `// Traverse the array freq[]` ` ` `for` `(` `int` `i = ` `0` `; i < ` `26` `; i++)` ` ` `{` ` ` ` ` `// Check if the i-th letter` ` ` `// is absent from string S` ` ` `if` `(freq[i] == ` `0` `)` ` ` `continue` `;` ` ` `// Calculate log of frequency` ` ` `// of the current character` ` ` `// in the string S` ` ` `int` `lg = (` `int` `)(Math.log(freq[i]) / Math.log(` `2` `));` ` ` `// Calculate power of 2 of lg` ` ` `int` `a = (` `int` `)Math.pow(` `2` `, lg);` ` ` `// Check if freq[i]` ` ` `// is a power of 2` ` ` `if` `(a == freq[i])` ` ` `{` ` ` ` ` `// Print letter i + 'a'` ` ` `// freq[i] times` ` ` `while` `(freq[i] > ` `0` `)` ` ` `{` ` ` `freq[i] -= ` `1` `;` ` ` `System.out.print((` `char` `)(i + ` `'a'` `));` ` ` `}` ` ` `}` ` ` `}` `}` `// Driver Code` `public` `static` `void` `main(String args[])` `{` ` ` `String S = ` `"aaacbb"` `;` ` ` `int` `N = S.length();` ` ` ` ` `countFrequency(S, N);` `}` `}` `// This code is contributed by AnkThon` |

## Python3

`# Python3 program for the above approach` `from` `math ` `import` `log2` `# Function to remove all the characters` `# from a that whose frequencies are not` `# equal to a perfect power of 2` `def` `countFrequency(S, N):` ` ` ` ` `# Stores the frequency of` ` ` `# each character in S` ` ` `freq ` `=` `[` `0` `] ` `*` `26` ` ` `# Iterate over characters of string` ` ` `for` `i ` `in` `range` `(N):` ` ` ` ` `# Update frequency of current` ` ` `# character in the array freq[]` ` ` `freq[` `ord` `(S[i]) ` `-` `ord` `(` `'a'` `)] ` `+` `=` `1` ` ` `# Traverse the array freq[]` ` ` `for` `i ` `in` `range` `(` `26` `):` ` ` `# Check if the i-th letter` ` ` `# is absent from S` ` ` `if` `(freq[i] ` `=` `=` `0` `):` ` ` `continue` ` ` `# Calculate log of frequency` ` ` `# of the current character` ` ` `# in the S` ` ` `lg ` `=` `int` `(log2(freq[i]))` ` ` `# Calculate power of 2 of lg` ` ` `a ` `=` `pow` `(` `2` `, lg)` ` ` `# Check if freq[i]` ` ` `# is a power of 2` ` ` `if` `(a ` `=` `=` `freq[i]):` ` ` `# Print letter i + 'a'` ` ` `# freq[i] times` ` ` `while` `(freq[i]):` ` ` `print` `(` `chr` `(i ` `+` `ord` `(` `'a'` `)), end ` `=` `"")` ` ` `freq[i] ` `-` `=` `1` `# Driver Code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` ` ` `S ` `=` `"aaacbb"` ` ` `N ` `=` `len` `(S)` ` ` ` ` `countFrequency(S, N)` `# This code is contributed by mohit kumar 29` |

## C#

`// C# program for the above approach` `using` `System;` `using` `System.Collections.Generic;` `class` `GFG{` ` ` `// Function to remove all the characters` `// from a string that whose frequencies` `// are not equal to a perfect power of 2` `static` `void` `countFrequency(` `string` `S, ` `int` `N)` `{` ` ` ` ` `// Stores the frequency of` ` ` `// each character in S` ` ` `int` `[]freq = ` `new` `int` `[26];` ` ` `Array.Clear(freq, 0, freq.Length);` ` ` `// Iterate over characters of string` ` ` `for` `(` `int` `i = 0; i < N; i++)` ` ` `{` ` ` ` ` `// Update frequency of current` ` ` `// character in the array freq[]` ` ` `freq[(` `int` `)S[i] - ` `'a'` `] += 1;` ` ` `}` ` ` `// Traverse the array freq[]` ` ` `for` `(` `int` `i = 0; i < 26; i++)` ` ` `{` ` ` ` ` `// Check if the i-th letter` ` ` `// is absent from string S` ` ` `if` `(freq[i] == 0)` ` ` `continue` `;` ` ` `// Calculate log of frequency` ` ` `// of the current character` ` ` `// in the string S` ` ` `int` `lg = (` `int` `)Math.Log((` `double` `)freq[i], 2.0);` ` ` `// Calculate power of 2 of lg` ` ` `int` `a = (` `int` `)Math.Pow(2, lg);` ` ` `// Check if freq[i]` ` ` `// is a power of 2` ` ` `if` `(a == freq[i])` ` ` `{` ` ` ` ` `// Print letter i + 'a'` ` ` `// freq[i] times` ` ` `while` `(freq[i] > 0)` ` ` `{` ` ` `freq[i] -= 1;` ` ` `Console.Write((` `char` `)(i + ` `'a'` `));` ` ` `}` ` ` `}` ` ` `}` `}` `// Driver Code` `public` `static` `void` `Main()` `{` ` ` `string` `S = ` `"aaacbb"` `;` ` ` `int` `N = S.Length;` ` ` ` ` `countFrequency(S, N);` `}` `}` `// This code is contributed by SURENDRA_GANGWAR` |

## Javascript

`<script>` ` ` `// JavaScript program for the above approach` ` ` `// Function to remove all the characters` ` ` `// from a string that whose frequencies` ` ` `// are not equal to a perfect power of 2` ` ` `function` `countFrequency(S, N)` ` ` `{` ` ` ` ` `// Stores the frequency of` ` ` `// each character in S` ` ` `var` `freq = ` `new` `Array(26).fill(0);` ` ` `// Iterate over characters of string` ` ` `for` `(` `var` `i = 0; i < N; i++)` ` ` `{` ` ` ` ` `// Update frequency of current` ` ` `// character in the array freq[]` ` ` `freq[S[i].charCodeAt(0) - ` `"a"` `.charCodeAt(0)]++;` ` ` `}` ` ` `// Traverse the array freq[]` ` ` `for` `(` `var` `i = 0; i < 26; i++)` ` ` `{` ` ` ` ` `// Check if the i-th letter` ` ` `// is absent from string S` ` ` `if` `(freq[i] === 0) ` `continue` `;` ` ` `// Calculate log of frequency` ` ` `// of the current character` ` ` `// in the string S` ` ` `var` `lg = parseInt(Math.log2(freq[i]));` ` ` `// Calculate power of 2 of lg` ` ` `var` `a = Math.pow(2, lg);` ` ` `// Check if freq[i]` ` ` `// is a power of 2` ` ` `if` `(a === freq[i])` ` ` `{` ` ` ` ` `// Print letter i + 'a'` ` ` `// freq[i] times` ` ` `while` `(freq[i]--)` ` ` `document.write(String.fromCharCode(i + ` `"a"` `.charCodeAt(0)));` ` ` `}` ` ` `}` ` ` `}` ` ` `// Driver Code` ` ` `var` `S = ` `"aaacbb"` `;` ` ` `var` `N = S.length;` ` ` `countFrequency(S, N);` ` ` ` ` `// This code is contributed by rdtank.` ` ` `</script>` |

**Output:**

bbc

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