1 //用list比较快
2 class Solution {
3 public String frequencySort(String s) {
4 if(s.length() == 0 || s.length() == 1) return s;
5 HashMap<Character, Integer> map = new HashMap<>();
6 char[] arr = s.toCharArray();
7 for(int i = 0; i < arr.length; i++) {
8 map.put(arr[i], map.getOrDefault(arr[i], 0)+1);
9 }
10 List<Character>[] arr2 = new List[s.length()+1];
11 for(char c : map.keySet()) {
12 if(arr2[map.get(c)] == null) {
13 List<Character> list = new ArrayList<>();
14 list.add(c);
15 arr2[map.get(c)] = list;
16 }else {
17 arr2[map.get(c)].add(c);
18 }
19 }
20
21
22 StringBuilder sb = new StringBuilder();
23 for(int i = arr2.length-1; i > 0; i--) {
24 if(arr2[i] != null) {
25 for(int j = 0; j < arr2[i].size(); j++) {
26 for(int k = 0; k < i; k++) {
27
28 sb.append(arr2[i].get(j));
29 }
30 }
31
32 }
33
34 }
35 return sb.toString();
36
37 }
38 }
39
40
41
42 //too slow
43 class Solution {
44 public String frequencySort(String s) {
45 if(s.length() == 0 || s.length() == 1) return s;
46 HashMap<Character, Integer> map = new HashMap<>();
47 char[] arr = s.toCharArray();
48 for(int i = 0; i < arr.length; i++) {
49 map.put(arr[i], map.getOrDefault(arr[i], 0)+1);
50 }
51 HashMap<Integer, List<Character>> map2 = new HashMap<>();
52 for(char c : map.keySet()) {
53 if(map2.containsKey(map.get(c))) {
54 map2.get(map.get(c)).add(c);
55 }else {
56 List<Character> list = new ArrayList<>();
57 list.add(c);
58 map2.put(map.get(c), list);
59
60 }
61 }
62 StringBuilder sb = new StringBuilder();
63 List<Integer> list = new ArrayList<>(map2.keySet());
64 Collections.sort(list);
65 for(int i : list) {
66 for(int j = 0; j < map2.get(i).size(); j++) {
67 for(int k = 0; k < i; k++) {
68 sb.insert(0, map2.get(i).get(j));
69 }
70 }
71 }
72 return sb.toString();
73
74 }
75 }