实现了我一直的想法,就是先用map存储,再用list存储,相当于先将字母作为索引记录下出现的次数Map<Character,Integer> map = new HashMap<>();,再将次数作为索引记录出现该次数的字母 List<Character> []bucket = new List[ s.length() + 1 ];
class Solution {
public String frequencySort(String s) {
Map<Character,Integer> map = new HashMap<>();
for( char e : s.toCharArray() ){
map.put( e , map.getOrDefault( e , 0 ) + 1 );
}
List<Character> []bucket = new List[ s.length() + 1 ];
for( char c : map.keySet()){
int frequency = map.get( c );
if( bucket[ frequency ] == null )bucket[ frequency ] = new ArrayList<>();
bucket[ frequency ].add( c );
}
StringBuilder sb = new StringBuilder();
for( int pos = bucket.length - 1 ; pos >= 0 ; pos -- ){
if( bucket[ pos ] != null ){
for( char c : bucket[ pos ]){
for( int i = 0 ; i < pos ; i ++ )
sb.append( c );
}
}
}
return sb.toString();
}
}