package problems.medium; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; /** * Created by sherxon on 2016-12-31. */ // this is O(NlgN) // this also can be solved O(n) public class SortCharactersByFrequency { public static void main(String[] args) { System.out.println((char)90); } public String frequencySort(String s) { if(s==null)return null; if(s.length()<3)return s; String r=null; HashMap<Character, Pair> map= new HashMap<>(); for(char c: s.toCharArray()){ if(!map.containsKey(c))map.put(c, new Pair(c, 1)); else map.get(c).count++; } List<Pair> list=new ArrayList<>(map.values()); Collections.sort(list); StringBuilder builder= new StringBuilder(); for (Pair pair : list) for (int i = 1; i <pair.count ; i++) builder.append(pair.c); return builder.toString(); } private class Pair implements Comparable<Pair>{ char c; int count; public Pair(char c, int count) { this.c = c; this.count = count; } @Override public int compareTo(Pair o) { return o.count-this.count; } } }