题目:
Given a string, sort it in decreasing order based on the frequency of characters.
Example 1:
Input:
"tree"
Output:
"eert"
Explanation:
'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
Example 2:
Input:
"cccaaa"
Output:
"cccaaa"
Explanation:
Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together.
Example 3:
Input:
"Aabb"
Output:
"bbAa"
Explanation:
"bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.
public class SortCharacterByFrequency {
public String frequencySort(String s) {
if (s == null)
return null;
if (s == "")
return s;
HashMap<Character, Integer> charFreqMap = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
charFreqMap.put(c, charFreqMap.getOrDefault(c, 0) + 1);
}
ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(charFreqMap.entrySet());
list.sort(new Comparator<Map.Entry<Character, Integer>>(){
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
StringBuffer sb = new StringBuffer();
for (Map.Entry<Character, Integer> e : list) {
for (int i = 0; i < e.getValue(); i++) {
sb.append(e.getKey());
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(new SortCharacterByFrequency().frequencySort("Aabb"));
}
}
public class SortCharacterByFrequency {
public String frequencySort(String s) {
if (s == null)
return null;
if (s == "")
return s;
char[] charArr = new char[128];
for(char c : s.toCharArray())
charArr[c]++;
StringBuilder sb = new StringBuilder();
while(sb.length() < s.length()) {
char maxChar = 0;
for(char charCur = 0; charCur < charArr.length; charCur++) {
if(charArr[charCur] > charArr[maxChar]) {
maxChar = charCur;
}
}
while(charArr[maxChar] > 0){
sb.append(maxChar);
charArr[maxChar]--;
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(new SortCharacterByFrequency().frequencySort("Aabb"));
}
}