451. Sort Characters By Frequency
2017-03-16 17:16
447 查看
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.
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 Solution { public String frequencySort(String s) { if (s == null) return ""; int max = 0; char[] charArray = s.toCharArray(); HashMap<Character, Integer> map = new HashMap(); for (char c : charArray) { if (!map.containsKey(c)) { map.put(c, 0); } map.put(c, map.get(c)+1); max = Math.max(max, map.get(c)); } List<Character>[] lists = buildList(map, max); return buildString(lists); } public List<Character>[] buildList(HashMap<Character, Integer> map, int max) { List<Character>[] res = new ArrayList[max+1]; for (Character c : map.keySet()) { int idx = map.get(c); if(res[idx] == null) { res[idx] = new ArrayList<Character>(); } res[idx].add(c); } return res; } public String buildString(List<Character>[] lists){ StringBuilder sb = new StringBuilder(); for (int i = lists.length-1; i >= 0; i--) { if(lists[i] != null) { for (Character c : lists[i]) { for (int j = i; j > 0; j--) { sb.append(c); } } } } return sb.toString(); } }
相关文章推荐
- 451. Sort Characters By Frequency
- leetcode-451-Sort Characters By Frequency
- 451. Sort Characters By Frequency(第十二周)
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency
- HashTable-451-Sort Characters By Frequency
- 频数相关的leetcode:451 Sort Characters By Frequency& 347 Top K Frequent Elements
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency。
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency**
- 451. Sort Characters By Frequency
- 451. Sort Characters By Frequency
- 【LeetCode-451】Sort Characters By Frequency
- Leetcode 451 Sort Characters By Frequency
- 451. Sort Characters By Frequency
- Leetcode 451 Sort Characters By Frequency
- 451. Sort Characters By Frequency