451. Sort Characters By Frequency

 

 

 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 }

 

posted @ 2018-09-28 06:08  jasoncool1  阅读(138)  评论(0编辑  收藏  举报