问题:求一个字符串中出现频率最大的字符,并按降序排列,如给定"Tree",则输出"eeTr"或者"eerT"其中任何一个。
思路:用hashmap记录每个字符出现的顺序,再对hashmap中的entry创建集合使其可见顺序,再写一个比较器将其进行排序.
import java.util.*;
public class Main{
public static void main(String []args){
String s="Tree";
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++){
Character c=s.charAt(i);
if(map.contains(c)){
map.put(c,map.get(c)+1);
}else{
map.put(c,1);
}
}
List<Map.Entry<Character,Integer>> arr=new ArrayList<>(map.entrySet());
Collections.sort(arr,new Comparator<Map.Entry>(){
@Override
public int compare(Map.Entry<Character,Integer> o1,Map.Entry<Character,Integer> o2){
return o2.getValue()-o1.getValue();
}
});
StringBuilder res=new StringBuilder();
for(Map.Entry<Character,Integer> entry:arr){
for(int j=0;j<entry.getvalue();j++){
res.appends(entry.getKey());
}
}
return res.toString();
}
}