Sort array of strings after sorting each string after removing characters whose frequencies are not a powers of 2 | Java program for the above approach ; Function to check if N is power of 2 or not ; Base Case ; Return true if N is power of 2 ; Function to print array of strings in ascending order ; Sort strings in ascending order ; Print the array ; Function to sort the strings after modifying each string according to the given conditions ; Store the frequency of each characters of the string ; Stores the required array of strings ; Traverse the array of strings ; Temporary string ; Stores frequency of each alphabet of the string ; Update frequency of S [ i ] [ j ] ; Traverse the map freq ; Check if the frequency of i . first is a power of 2 ; Update string st ; Clear the map ; Null string ; Sort the string in descending order ; Update res ; Print the array of strings ; Driver Code
import java . io . * ; import java . lang . * ; import java . util . * ; class GFG { static boolean isPowerOfTwo ( int n ) { if ( n == 0 ) return false ; return ( Math . ceil ( Math . log ( n ) / Math . log ( 2 ) ) == Math . floor ( Math . log ( n ) / Math . log ( 2 ) ) ) ; } static void printArray ( ArrayList < String > res ) { Collections . sort ( res ) ; for ( int i = 0 ; i < res . size ( ) ; i ++ ) { System . out . print ( res . get ( i ) + " ▁ " ) ; } } static void sortedStrings ( String S [ ] , int N ) { HashMap < Character , Integer > freq = new HashMap < > ( ) ; ArrayList < String > res = new ArrayList < > ( ) ; for ( int i = 0 ; i < N ; i ++ ) { String st = " " ; for ( int j = 0 ; j < S [ i ] . length ( ) ; j ++ ) { freq . put ( S [ i ] . charAt ( j ) , freq . getOrDefault ( S [ i ] . charAt ( j ) , 0 ) + 1 ) ; } for ( char ch : freq . keySet ( ) ) { if ( isPowerOfTwo ( freq . get ( ch ) ) ) { for ( int j = 0 ; j < freq . get ( ch ) ; j ++ ) { st += ch ; } } } freq . clear ( ) ; if ( st . length ( ) == 0 ) continue ; char myCharArr [ ] = st . toCharArray ( ) ; Arrays . sort ( myCharArr ) ; String ns = " " ; for ( int j = myCharArr . length - 1 ; j >= 0 ; -- j ) ns += myCharArr [ j ] ; res . add ( ns ) ; } printArray ( res ) ; } public static void main ( String [ ] args ) { String arr [ ] = { " aaacbb " , " geeks " , " aaa " } ; int N = arr . length ; sortedStrings ( arr , N ) ; } }