← Sorting

Sort Characters by Frequency

Medium
Python
def frequency_sort(s):
    from collections import Counter
    c=Counter(s)
    return ''.join(ch*cnt for ch,cnt in c.most_common())
Java
public String frequencySort(String s){
    int[] freq=new int[128];
    for(char c:s.toCharArray()) freq[c]++;
    Character[] chars=new Character[s.length()];
    for(int i=0;i<s.length();i++) chars[i]=s.charAt(i);
    Arrays.sort(chars,(a,b)->freq[b]-freq[a]);
    StringBuilder sb=new StringBuilder();
    for(char c:chars) sb.append(c);
    return sb.toString();
}

Key Insight

Counter.most_common() is elegant. Java needs custom sort with freq array.

Python → Java Differences

  • Counter.most_common() vs custom sort
  • ch*cnt repeats string
  • Python dramatically more concise
Python
def frequency_sort(s):
    from collections import Counter
    c=Counter(s)
    return ''.join(ch*cnt for ch,cnt in c.most_common())
Java
public String frequencySort(String s){
    int[] freq=new int[128];
    for(char c:s.toCharArray()) freq[c]++;
    Character[] chars=new Character[s.length()];
    for(int i=0;i<s.length();i++) chars[i]=s.charAt(i);
    Arrays.sort(chars,(a,b)->freq[b]-freq[a]);
    StringBuilder sb=new StringBuilder();
    for(char c:chars) sb.append(c);
    return sb.toString();
}

Algorithm Steps

1. Count frequencies
2. Sort by frequency desc
3. Build result